Создание подзапроса в laravel - PullRequest
0 голосов
/ 27 января 2019

Как я могу преобразовать следующий запрос SQL в конструктор запросов Laravel?

select
    *
from
    users
where
    EXISTS (
    SELECT
        *
    from
        posts
    where
        posts.created_by = users.id )

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Вы можете использовать метод has с соответствующей взаимосвязью.

Для этого:

  1. Создать User и Post модели.
  2. Определите отношения между моделями, например, User имеет множество Post с posts в качестве отношения, а Post принадлежит User.
  3. Используйте отношение с методом has следующим образом: User::has('posts')->get(), где posts - имя отношения в User модели.

С docs :

При доступе к записям для модели вы можете захотеть ограничить свои результаты в зависимости от наличия связи.Например, представьте, что вы хотите получить все сообщения блога, в которых есть хотя бы один комментарий.Для этого вы можете передать имя отношения методам has и orHas:

// Retrieve all posts that have at least one comment...
$posts = App\Post::has('comments')->get();

Таким образом, в вашем коде будут получены все пользователи, у которых есть хотя бы одно сообщение

0 голосов
/ 27 января 2019

Должно работать следующее:

DB::table('users')
    ->whereExists(function ($query) {
        $query->select('*')
            ->from('posts')
            ->whereRaw('posts.created_by = users.id');
    })
    ->get();

Вы также можете взглянуть на документацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...