我有3张桌子 1)产品 2)评论 3)用户
一个产品可以有很多评论,而一个评论仅属于一个用户。 这是我为所有3个模型定义的关系。
1)产品型号
class product{
public function comments(){
return $this->hasMany(Comments::class,'product_id');
}
}
2)评论模型
class comments{
public function product(){
return $this->belongsTo(Product::class);
}
public function user(){
return $this->hasOne(User::class,'id','user_id');
}
}
3)用户模型
class User{
public function comment(){
return $this->belongsTo(Comments::class);
}
}
我想吸引所有对该产品发表评论的用户。 (我知道我可以通过with()来遍历产品和评论,但是我不想遍历所有评论,我希望所有用户都回答没有评论数据。)
简而言之,从产品ID开始,我希望所有对此发表评论的用户数据 产品(不循环浏览所有评论)
答案 0 :(得分:1)
尝试一下:
User::whereHas('comment', function ($query) use ($productId) {
$query->whereHas('product', function ($query) use ($productId) {
$query->where('products.id', $productId);
});
})->get();
答案 1 :(得分:1)
您不能“绕过comments
关系,因为您在product
和user
之间没有直接关系,但是您可以与他们的用户一起获得评论,然后{ {1}}所有用户。
pluck
您将获得独特的$users = Product::with('comments', 'comments.user')
->find(2) // product_id
->comments
->pluck('user')
->unique();
模型的集合。
别忘了User
可以返回->find()
,因此您应该添加相应的检查,以避免访问null
中的->comments
来获取异常。