それは少し「トリッキー」なものです。 phpmyadminで実行しているクエリは、確かに正しいものです。ただし、Laravelはwhere()
を使用します およびon()
別の方法で。
where()
を使用する 値とon()
を使用 列を操作するとき。
$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');
ドキュメント: https://laravel.com/docs/5.4/queries 、セクション(CTRL + F):高度な結合
もう少し明確にするために:
$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');
結果:
JOIN on `times`.`ath_id` = `b`.`auth_id` WHERE `times`.`stroke_id` = 'b.stroke_id' -- AS STRING
toSql()
のときに混乱が生じました クエリを返し、Laravel
それを知っています:
['b.stroke_id', 'b.time', '4298584']
最初の2つのバインドバインディングは列です。しかし、where()
彼らはただのひもだと思います。