检查是否属于多个关系存在 - Laravel

2022-08-30 07:47:14

我的两个表(客户端和产品)使用Laravel的blongToMany和数据透视表具有ManyToMany关系。现在我想检查某个客户是否有特定的产品。

我可以创建一个模型来检查数据透视表,但由于Laravel不需要这个模型来执行属于ToMany方法,我想知道是否有另一种方法可以检查是否存在某种关系,而无需为数据透视表提供模型。


答案 1

我认为这样做的官方方法是做:

$client = Client::find(1);
$exists = $client->products->contains($product_id);

这有点浪费,因为它会执行查询,将所有结果放入一个,然后最后执行一个over,以找到具有您传入的ID的模型。但是,它不需要对数据透视表进行建模。SELECTCollectionforeachCollection

如果您不喜欢这样做的浪费,则可以在SQL / Query Builder中自己完成,这也不需要对表进行建模(如果您还没有将其用于其他目的,也不需要获取模型):Client

$exists = DB::table('client_product')
    ->whereClientId($client_id)
    ->whereProductId($product_id)
    ->count() > 0;

答案 2

这个问题已经很老了,但这可能有助于其他人寻找解决方案:

$client = Client::find(1);
$exists = $client->products()->where('products.id', $productId)->exists();

没有像@alexrussell解决方案那样的“浪费”,查询也更有效率。


推荐