ВЫБЕРИТЕ СЧЕТЧИК в ГДЕ КЛАУЗ в Eloquent - PullRequest
0 голосов
/ 20 октября 2018

Я знаю, что нечто подобное было здесь некоторое время назад, но это был не тот случай, и я не могу просто понять это на себе.Мне нужно преобразовать сырой SQL-запрос в Eloquent.

Этот запрос содержит SELECT COUNT в предложении WHERE, для простоты у меня есть такой (возможно, не очень большой смысл) запрос:

SELECT u.column1, u.column2, u.column3, s.column1 FROM users u
LEFT JOIN salary s ON u.id = s.user_id  
WHERE 
(
SELECT count(cars_id) FROM cars WHERE cars.user_id = u.id
) = 0 
AND u.city IN ("London","Paris")

Я пытался:

$columns = [
        'users.column1',
        'users.column2',
        'users.column3',
        'salary.column1'
        ];

$q = User::select($columns)
    ->leftJoin('salary', 'salary.user_id', '=', 'users.id')
    ->whereRaw(" (SELECT COUNT(cars_id) FROM cars WHERE cars.user_id = u.id) = 0 ")
    ->whereRaw("u.city IN ('London','Paris')") 
    ->get();

Но он не возвращает те же результаты, что и необработанный SQL (в SQL было 161 строка и Eloquent 154 строки).

Может быть, вы знаете, как правильно преобразовать этот тип запроса в Eloquent?

Спасибо

1 Ответ

0 голосов
/ 20 октября 2018

На основании вашего запроса, я считаю, что это должно сделать:

DB::table('users as u')
    ->select([ 'u.column1', 'u.column2', 'u.column3', 's.column1'])
    ->leftJoin('salary as s', 'u.id', '=', 's.user_id')
    ->leftJoin('cars as c', 'c.user_id', '=', 'u.id')
    ->whereIn('u.city', ['London', 'Paris'])
    ->havingRaw('count(c.id) = 0')
    ->get();

Пожалуйста, дайте мне знать.

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