質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

3214閲覧

LaravelのsetBindingsで値を渡す方法

laravel12345

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/09/30 04:52

タイトルの通り、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(); }

としてみましたが状況は変わらず。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

setBindingsは関係なく、selectで取得する項目をから明示的にカラムを示すことで自己解決しました。
->select('
')ではなく
->select('users.name')とかにする

投稿2021/09/30 14:24

laravel12345

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問