Laravel 5.7仅选择关系数据而无其他关系的循环

时间:2019-01-25 07:03:55

标签: laravel laravel-5 eloquent laravel-5.7

我有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开始,我希望所有对此发表评论的用户数据   产品(不循环浏览所有评论)


2 个答案:

答案 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关系,因为您在productuser之间没有直接关系,但是您可以与他们的用户一起获得评论,然后{ {1}}所有用户。

pluck

您将获得独特的$users = Product::with('comments', 'comments.user') ->find(2) // product_id ->comments ->pluck('user') ->unique(); 模型的集合。

别忘了User可以返回->find(),因此您应该添加相应的检查,以避免访问null中的->comments来获取异常。