sql >> データベース >  >> RDS >> Mysql

SQL / Laravel-クエリが空のコレクションを返すのはなぜですか?

    それは少し「トリッキー」なものです。 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() 彼らはただのひもだと思います。




    1. Railsのテーブルにどのインデックスを追加するか

    2. cronジョブを1回だけ実行します

    3. Mysql-ストアドプロシージャを終了/終了する方法

    4. SQLデータベースを簡単に復元–ステップバイステップガイド