タイトルの通り、LaravelのsetBindingsで値を渡す方法が知りたいです。
なお、Laravelのクエリビルダにおいてサブクエリを使っておりコードは以下のようになっています。
※本来のコードは事情あって載せられないの、あくまで簡易的にしたコード参考
$prev_start = '2020-09-01 00:00:00'; $prev_end = '2020-09-02 00:00:00'; $start = '2021-09-01 00:00:00'; $end = '2021-09-02 23:59:59'; $foo = DB::table('users') ->select('*') ->where('a_id', $a_id) ->whereBetween('created_at', [$start, $end]); $hoge = DB::table('users') ->select('*') ->where('a_id', $a_id) ->whereBetween('created_at', [$prev_start, $prev_end]); $result = DB::table(DB::raw('.$foo->toSql().') as foos) ->leftJoin(DB::raw('.$hoge->toSql().') as hoges, function ($query) { $query->on('foos.id', 'hoges.id') }) ->select('*') ->setBindings([ [':a_id' => $a_id] [':start' => $start] [':end' => $end] [':prev_start' => $prev_start] [':prev_end' => $prev_end] ])
上記の場合、選択された日付が
$start→2021-09-01、$end→2021-09-02の場合、それぞれデータがあるのでsetBindingsにもデータ渡されるんですが、
$start→2021-09-01、$end→2021-09-03にした場合、2021-09-01と2021-09-02はデータが正常に取得できるが、2021-09-03はnullになる。
2021-09-03の時に$hogeがnullであっても$resultにデータを渡すにはどうすればいいでしょうか?
出力するデータとしては、
日付、ユーザー数、前年のユーザ数との増減割合
となっています。
つまり、
2021-09-01 2 10%
2021-09-02 3 30%
2021-09-03 4 -
とさせたいのですが、現状は
2021-09-01 2 10%
2021-09-02 3 30%
2021-09-03 - -
となってしまいます。
※おそらく2021-09-03は$hogeが空データで帰ってくるからsetBindingsにデータが渡されなていない??
$hogeのデータがなかったら$fooだけ返すようにすればいいんかな?と思って、
if ($hoge->get()->isEmpty()) { $foofoo = $foo->get(); } else { $foofoo = $result->get(); }
としてみましたが状況は変わらず。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。