如何写Laravel 7嵌套查询?

How to write Laravel 7 nested query?

我有3张桌子

  1. 用户
  2. 产品
  3. 评分

还有 3 个模型

  1. 用户
  2. 产品
  3. 评分

人际关系

  1. 产品属于用户
  2. 用户有很多评分

现在我想获取用户评分超过 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,并且关系被命名为

  1. 产品属于用户:关系名称 = users
  2. 用户有很多评级:关系名称 = ratings

那你可以试试

$products = Product::whereHas('users.ratings', function($rating){
    $rating->where('rating','>',2); 
})->get();