如何在Laravel中获得对产品的经过验证的评论

时间:2018-12-17 08:56:28

标签: php laravel model relationship

我遵循的是数据结构,

产品

  1. id
  2. 名称
  3. 说明

产品评论

  1. id
  2. user_id
  3. product_id
  4. 评论
  5. 评分
  6. 状态(是/否)

关系是一对多的,即一种产品具有很多评论。

我要加载的所有产品均带有经过验证的评论(即状态为true的评论)

我已经尝试关注

 $products = Product::with('reviews')->get();

但是当我遍历$products以访问诸如$ product-> reviews之类的评论时,将显示所有评论(甚至状态错误的评论)。

任何建议都值得赞赏。

3 个答案:

答案 0 :(得分:6)

您可以在with函数中添加一个闭包以添加额外的过滤条件。

Linux Kali 4.18.0-kali2-amd64 #1 SMP Debian 4.18.10-2kali1 (2018-10-09) x86_64 GNU/Linux

另一种选择是将过滤的关系函数添加到您的产品模型中。

Product::with([
    'reviews' => function ($query) { $query->where('status', true); }
])->get();

现在在您的with子句中调用此函数。

public function verifyedReviews() {
    return $this->reviews()->where('status', true);
}

答案 1 :(得分:1)

使用clousre试试这个

 $products = Product::with(['reviews' => fuction($query) {
        return $query->where('status',true); 
}])->get();

答案 2 :(得分:0)

您可以使用 WhereHas()

您的代码应为:

$products = Product::whereHas('reviews',function($query){
    return $query->where('status',true);
})->get();