Проблема синтаксиса Eloquent Query Laravel 5 при выборе значения MAX из столбца

0

Я нахожусь пять дней в Ларавеле, и после нескольких часов просмотра Джеффри Пути я решил углубиться в создание приложения, чтобы учиться. Я переношу старое приложение на L5 как способ узнать.

Я просто пробовал этот синтаксис, который работал без ошибок, но возвращал пустую запись, поэтому был неправильный вывод. Старый SQL возвращает одну запись для входных данных ниже.

Что еще изменилось между старым SQL и новым запросом L5, что результаты разные? Благодарю!

Я пытаюсь реплицировать этот SQL:

SELECT DISTINCT
    TBA.*, 
    TBB.*,                      
    MAX(TBA.mv_a_m_loss) as mv_a_m_loss
FROM TBA,
    TBB,
    TBC
WHERE TBB.id = 1
AND TBC.id = 1
AND TBB.conductor_temp = TBA.conductor_temp
AND TBB.conductor_size_mm_sq = TBA.conductor_size_mm_sq
AND TBA.mv_a_m_loss < 50
AND TBC.id = TBB.id
AND TBC.id = TBA.id

Вот мой синтаксис Laravel 5 Eloquent:

$temp = DB::table('TBC')
    ->join('TBB', 'TBC.id', '=', 'TBB.id')
    ->join('TBA', 'TBC.id', '=', 'TBA.id')
    ->where('TBC.TBA_id', '=', 1)
    ->where('TBC.TBB_id', '=', 1)
    ->where('TBA.mv_a_m_loss', '<', 50)
    ->where('TBB.conductor_temp', '=', 'TBA.conductor_temp')
    ->where('TBB.conductor_size_mm_sq', '=', 'TBA.conductor_size_mm_sq')
    ->distinct()->get(['TBA.*', 'TBB.*', DB::raw('MAX(TBA.mv_a_m_loss) AS max_mv_a_m_loss')]);
dd($temp);

Результат для старого SQL - это одна запись, результат L5 - это запись NULL.

  • 0
    Задайте простой вопрос (потому что его немного сложно прочитать), почему вы не используете какие-либо ассоциации? было бы намного проще, а также получить максимальное значение
  • 0
    Извините @Levente Надя, у меня есть классы для каждой таблицы с определенными отношениями. Это то, что вы имеете в виду?
Показать ещё 2 комментария
Теги:
eloquent
laravel-5
query-builder

1 ответ

1
Лучший ответ

Не вдаваясь в то, следует ли вам использовать отношения или нет, но вот решение для вас:

->whereRaw('TBB.conductor_temp = TBA.conductor_temp')
->whereRaw('TBB.conductor_size_mm_sq = TBA.conductor_size_mm_sq')

Вы можете использовать select(x,'=', DB::raw(..)) а также разницу.

Заметьте, что значение, переданное в where метод связан PDO. Тем не менее, он всегда сравнивается как строка, а не как столбец таблицы.

  • 0
    КЛАССНО! Большое спасибо! Теперь мне нужно разобраться в отношениях. Еще раз спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню