检查是否属于多个关系存在 - Laravel
我的两个表(客户端和产品)使用Laravel的blongToMany和数据透视表具有ManyToMany关系。现在我想检查某个客户是否有特定的产品。
我可以创建一个模型来检查数据透视表,但由于Laravel不需要这个模型来执行属于ToMany方法,我想知道是否有另一种方法可以检查是否存在某种关系,而无需为数据透视表提供模型。
我的两个表(客户端和产品)使用Laravel的blongToMany和数据透视表具有ManyToMany关系。现在我想检查某个客户是否有特定的产品。
我可以创建一个模型来检查数据透视表,但由于Laravel不需要这个模型来执行属于ToMany方法,我想知道是否有另一种方法可以检查是否存在某种关系,而无需为数据透视表提供模型。
我认为这样做的官方方法是做:
$client = Client::find(1);
$exists = $client->products->contains($product_id);
这有点浪费,因为它会执行查询,将所有结果放入一个,然后最后执行一个over,以找到具有您传入的ID的模型。但是,它不需要对数据透视表进行建模。SELECT
Collection
foreach
Collection
如果您不喜欢这样做的浪费,则可以在SQL / Query Builder中自己完成,这也不需要对表进行建模(如果您还没有将其用于其他目的,也不需要获取模型):Client
$exists = DB::table('client_product')
->whereClientId($client_id)
->whereProductId($product_id)
->count() > 0;
这个问题已经很老了,但这可能有助于其他人寻找解决方案:
$client = Client::find(1);
$exists = $client->products()->where('products.id', $productId)->exists();
没有像@alexrussell解决方案那样的“浪费”,查询也更有效率。