如何写Laravel 7嵌套查询?
How to write Laravel 7 nested query?
我有3张桌子
- 用户
- 产品
- 评分
还有 3 个模型
- 用户
- 产品
- 评分
人际关系
- 产品属于用户
- 用户有很多评分
现在我想获取用户评分超过 2 的产品。
如何编写查询?
您还可以在您的用户模型中使用 hasManyThrough(Product::class, Rating::class) 建立关系,然后再使用它。
查看有关 eloquent 的 laravel 文档,以更好地了解如何使用它进行查询:
https://laravel.com/docs/7.x/eloquent
并查看文档中的关系部分,了解 hasManyThrough 的工作原理。
https://laravel.com/docs/7.x/eloquent-relationships#introduction
您可以使用whereHas()
方法。例如
假设您的 ratings
table 有一个存储评级值的字段 rating
,并且关系被命名为
- 产品属于用户:关系名称 =
users
- 用户有很多评级:关系名称 =
ratings
那你可以试试
$products = Product::whereHas('users.ratings', function($rating){
$rating->where('rating','>',2);
})->get();
我有3张桌子
- 用户
- 产品
- 评分
还有 3 个模型
- 用户
- 产品
- 评分
人际关系
- 产品属于用户
- 用户有很多评分
现在我想获取用户评分超过 2 的产品。
如何编写查询?
您还可以在您的用户模型中使用 hasManyThrough(Product::class, Rating::class) 建立关系,然后再使用它。
查看有关 eloquent 的 laravel 文档,以更好地了解如何使用它进行查询:
https://laravel.com/docs/7.x/eloquent
并查看文档中的关系部分,了解 hasManyThrough 的工作原理。
https://laravel.com/docs/7.x/eloquent-relationships#introduction
您可以使用whereHas()
方法。例如
假设您的 ratings
table 有一个存储评级值的字段 rating
,并且关系被命名为
- 产品属于用户:关系名称 =
users
- 用户有很多评级:关系名称 =
ratings
那你可以试试
$products = Product::whereHas('users.ratings', function($rating){
$rating->where('rating','>',2);
})->get();