Laravel: Красноречиво, где не исключаются записи с определенным значением

#laravel

Вопрос:

Я создаю приложение SNS, в котором пользователь и сообщение находятся в отношениях «многие ко многим», с избранным в сводной таблице. Есть ли способ получить все сообщения, которые вам не понравились?

 $posts = Post::wherehas("users",function($q)use($your_id){
    $q->where('user_id', '!=', $your_id);
})->orDoesntHave('users')->get();

return $posts;
 

Вышеописанный метод был тем, что я придумал, но, похоже, он не работал, когда более 2 пользователей отдавали предпочтение одному и тому же сообщению.

Ответ №1:

вам нужно выбрать все сообщения , которые не связаны с избранными пользователями, что означает, что у вас нет отношений с конкретным пользователем, поэтому вы можете использовать whereDoesntHave, как это :-

 $posts = Post::whereDoesntHave("users",function($q)use($your_id){
    $q->where('user_id', '!=', $your_id);
})->get();

return $posts;