Как простой вложенный запрос перевести в Eloquent?

Для перевода простого вложенного запроса в Eloquent, сначала нам нужно понять, какой именно запрос мы пытаемся перевести.

Вложенные запросы используются для выполнения подзапросов внутри основного запроса. Это позволяет нам объединять результаты нескольких запросов в одном запросе.

Предположим, у нас есть следующий вложенный запрос в чистом SQL:

SELECT * FROM users WHERE id IN (SELECT user_id FROM posts WHERE is_published = 1)

Данный запрос выбирает все записи из таблицы "users", где идентификатор пользователя присутствует в результате вложенного запроса, который выбирает все идентификаторы пользователей из таблицы "posts", где флаг "is_published" равен 1.

Теперь давайте переведем этот запрос на Eloquent.

Сначала нам понадобится модель "User" и модель "Post". Модель "User" будет связана с моделью "Post" через отношение "hasMany".

Таким образом, в модели "User" нам нужно добавить следующий код:

public function posts()
{
    return $this->hasMany(Post::class);
}

Теперь, чтобы перевести вложенный запрос, мы сможем использовать "Eloquent" как следующим образом:

$users = User::whereIn('id', function($query) {
    $query->select('user_id')
    ->from('posts')
    ->where('is_published', 1);
})->get();

Мы используем метод "whereIn" для выбора пользователей, чей идентификатор присутствует в результате вложенного запроса. Вложенный запрос выполняется с помощью анонимной функции внутри метода "whereIn". Внутри этой функции мы используем методы "select", "from" и "where" для построения вложенного запроса.

Затем мы вызываем метод "get", чтобы получить все записи, удовлетворяющие условию.

Таким образом, мы перевели наш простой вложенный запрос в Eloquent. Это позволяет нам использовать ORM-функции Laravel для выполнения запроса и получения результатов в более удобном и гибком формате.