Laravel 5.7 выбирает только данные отношений без прохождения через другие отношения - PullRequest
0 голосов
/ 25 января 2019

у меня 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);
     }
}

Я хочу получить всех пользователей, которые прокомментировали продукт. (Я знаю, что могу сделать с помощью () и циклически просматривать продукт и комментарий, но я не хочу циклически просматривать все комментарии, я хочу, чтобы все пользователи отвечали без данных комментариев.)


Короче из идентификатора продукта, я хочу, чтобы все данные пользователей, которые прокомментировали это товар (без перебора всех комментариев)


Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы не можете "обойти comments отношения", потому что у вас нет прямой связи между product и user, но вы можете получать комментарии вместе с их пользователями, а затем pluck со всеми пользователями.

$users = Product::with('comments', 'comments.user')
                ->find(2) // product_id
                ->comments
                ->pluck('user')
                ->unique();

Вы получите коллекцию уникальных User моделей.

Не забывайте, что ->find() может вернуть null, поэтому вы должны добавить соответствующую проверку, чтобы избежать получения исключения путем доступа к ->comments из null.

0 голосов
/ 25 января 2019

попробуйте это:

User::whereHas('comment', function ($query) use ($productId) {
        $query->whereHas('product', function ($query) use ($productId) {
            $query->where('products.id', $productId);
        });
    })->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...