Как вытащить с таблицы данные которых нет в другой таблице laravel?

Для того чтобы вытащить данные из одной таблицы, которых нет в другой таблице в 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". Вы можете дальше манипулировать полученными данными по своему усмотрению.