raw SQL to laravel построитель запросов - PullRequest
0 голосов
/ 26 марта 2020

Как конвертировать этот необработанный sql построитель в laravel DB Builder

SELECT * 
FROM   `applications` 
WHERE  EXISTS (SELECT * 
               FROM   `applicants` 
                      INNER JOIN `applicant_application` 
                              ON `applicants`.`id` = 
                                 `applicant_application`.`applicant_id` 
               WHERE  `applications`.`id` = 
                      `applicant_application`.`application_id` 
                      AND `user_id` = 18) 
ORDER  BY `created_at` DESC 
LIMIT 20

Это то, что я пробовал, но, похоже, не работает

DB::table('applications as apt')
->whereExists( function ($q) {
    $q->from('applicants as app')
    ->join('applicant_application as aa', 'app.id', '=', 'aa.applicant_id')
    ->where('apt.id', '=', 'aa.application_id')
    ->where('app.user_id', '=', 18);
})->orderBy('created_at', 'DESC')->paginate(10);

Буду признателен за любую помощь

1 Ответ

2 голосов
/ 26 марта 2020

Поскольку apt.id и aa.application_id - это два столбца из таблиц различий, и вы используете where для сравнения apt.id со строкой 'aa.application_id'.

You необходимо использовать whereColumn для сравнения двух разных столбцов :

->whereColumn('apt.id', '=', 'aa.application_id')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...