Đó là một cái gì đó một chút "khó khăn". Truy vấn bạn đang thực hiện trong phpmyadmin thực sự là chính xác. Tuy nhiên, Laravel sử dụng where()
và on()
khác.
Sử dụng where()
với một giá trị và on()
khi làm việc với các cột.
$times = Time::join(\DB::raw('(SELECT `ath_id`, `stroke_id`, MIN(time) AS time FROM times GROUP BY ath_id, stroke_id) b'), function($join) {
$join->on('times.ath_id', '=', 'b.ath_id')
->on('times.stroke_id', '=', 'b.stroke_id')
->on('times.time', '=', 'b.time');
})
->where('times.ath_id', '=', $id)
->orderBy('times.stroke_id', 'ASC')
->orderBy('times.date', 'DESC');
Tài liệu: https://laravel.com/docs/5.4/queries , phần (CTRL + F): Kết hợp nâng cao
Để làm rõ hơn một chút:
$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');
kết quả là:
JOIN on `times`.`ath_id` = `b`.`auth_id` WHERE `times`.`stroke_id` = 'b.stroke_id' -- AS STRING
Sự nhầm lẫn xảy ra khi toSql()
đã trả lại truy vấn của bạn và bạn giả định rằng Laravel
biết rằng:
['b.stroke_id', 'b.time', '4298584']
hai ràng buộc ràng buộc đầu tiên là cột. Nhưng where()
nghĩ rằng họ chỉ là chuỗi.