Die Methoden von @ nielsiano werden funktionieren, aber sie werden die Datenbank für jedes Benutzer / Produkt-Paar abfragen, was meiner Meinung nach eine Verschwendung ist.
Wenn Sie nicht alle Daten der zugehörigen Modelle laden möchten, würde ich Folgendes für einen einzelnen Benutzer tun :
protected $productIds = null;
public function getProductsIdsAttribute()
{
if (is_null($this->productsIds) $this->loadProductsIds();
return $this->productsIds;
}
public function loadProductsIds()
{
$this->productsIds = DB::table($this->products()->getTable())
->where($this->products()->getForeignKey(), $this->getKey())
->lists($this->products()->getOtherKey());
return $this;
}
public function hasProduct($id)
{
return in_array($id, $this->productsIds);
}
Dann können Sie einfach Folgendes tun:
$user = User::first();
$user->hasProduct($someId);
Auth::user()->hasProduct($someId);
Es wird nur 1 Abfrage ausgeführt, dann arbeiten Sie mit dem Array.
Der einfachste Weg wäre die Verwendung von contains
@alexrussell.
Ich denke, dies ist eine Frage der Präferenz. Wenn Ihre App nicht sehr groß ist und viel Optimierung erfordert, können Sie auswählen, mit was Sie leichter arbeiten können.