Для того чтобы вытащить данные из одной таблицы, которых нет в другой таблице в Laravel, вы можете использовать операторы SQL JOIN и WHERE NOT EXISTS.
Предположим, у нас есть две таблицы: "users" и "posts". Мы хотим выбрать всех пользователей, у которых нет постов в таблице "posts".
Можно выполнить следующий код, используя фасад DB и методы Builder:
use IlluminateSupportFacadesDB; $usersWithoutPosts = DB::table('users') ->whereNotExists(function ($query) { $query->select(DB::raw(1)) ->from('posts') ->whereRaw('posts.user_id = users.id'); }) ->get();
Здесь мы создаем запрос к таблице "users" и используем метод whereNotExists для проверки наличия постов для каждого пользователя. Используя анонимную функцию, мы строим подзапрос, в котором выбираем столбец "1" (просто для проверки на наличие записей) из таблицы "posts" для каждого пользователя. Затем сравниваем user_id в таблице "posts" с id в таблице "users".
Метод get() выполняет запрос и возвращает результат в виде коллекции объектов.
Вы также можете использовать Eloquent ORM для выполнения такого запроса. Предположим, что у нас есть модели User и Post, и связь один к многим между ними (User hasMany Post, Post belongsTo User):
use AppModelsUser; use AppModelsPost; $usersWithoutPosts = User::whereDoesntHave('posts')->get();
Здесь мы используем метод whereDoesntHave, который делает то же самое, что и whereNotExists, но работает на уровне моделей и связей.
Оба примера вернут коллекцию пользователей, у которых нет постов в таблице "posts". Вы можете дальше манипулировать полученными данными по своему усмотрению.