Я нахожусь пять дней в Ларавеле, и после нескольких часов просмотра Джеффри Пути я решил углубиться в создание приложения, чтобы учиться. Я переношу старое приложение на 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.
Не вдаваясь в то, следует ли вам использовать отношения или нет, но вот решение для вас:
->whereRaw('TBB.conductor_temp = TBA.conductor_temp')
->whereRaw('TBB.conductor_size_mm_sq = TBA.conductor_size_mm_sq')
Вы можете использовать select(x,'=', DB::raw(..))
а также разницу.
Заметьте, что значение, переданное в where
метод связан PDO. Тем не менее, он всегда сравнивается как строка, а не как столбец таблицы.