MySQL запрос к Laravel Eloquent

У меня есть следующий запрос MySQL:

SELECT
*
FROM
news_posts
WHERE
user_id = ?
AND id NOT IN (SELECT
post_id
FROM
user_read
WHERE
user_id = ?)

Я хочу сделать это более «красноречивым». Я пробовал следующее, но это (очевидно) не работает:

NewsPost::where('user_id', Auth::id())
->whereNotIn(function ($query) {
$query->DB::table('user_read')
->select('post_id')
->where('user_id', Auth::id());
})->get();

0

Решение

Я предполагаю, что метод ‘where’ выполняет простой SQL-запрос к таблице ‘new_posts’. Можете ли вы попробовать переписать этот запрос и позволить mysql выполнять фильтрацию новых сообщений? (поиск по левому внешнему соединению на mysql)

SELECT *
FROM news_posts a
JOIN user_read b
ON a.id = b.post_id
WHERE a.user_id = ?
AND b.post_id IS NULL;
0

Другие решения

Спасибо за все отклики! Получил работу со следующими настройками:

 NewsPost::where('user_id', Auth::id())
->whereNotIn('id', function ($query) {
$query->select('post_id')
->from('user_read')
->where('user_id', Auth::id());
})
->get();
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector