2つのテーブルをまとめて以下の期待データを作成したいのですが、NULLが一番最後にきてしまい、配列の中の順番がおかしくなってしまいます。
やりたいことしては、$cast_emailsにないsite_id 3,5 にはNULLが入って0~4まで順番通りに並んでほしいというような感じです
何が間違っているのかもわからなく、困っています。
こちらのコードで下記二つのテーブルを組み合わせて
$join_site_user_to_cast_emails = DB::table('site_user') ->leftjoin('cast_emails', function ($leftjoin) { // $this->edit($id); $leftjoin->on('site_user.site_id', '=', 'cast_emails.site_id')->where('cast_id', 2); }) ->get();
cast_emailsテーブル
id | user_id | site_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 1 | 4 |
5 | 1 | 5 |
site_userテーブル
id | cast_id | site_id |
---|---|---|
1 | 2 | 1 |
2 | 2 | 2 |
3 | 2 | 4 |
以下のような"データを作成したいのですが
#items: array:5 [▼ 0 => {#1348 ▼ +"id": 9 +"user_id": 1 +"site_id": 1 +"cast_id": 2 } 1 => {#1341 ▼ +"id": 10 +"user_id": 1 +"site_id": 2 +"cast_id": 2 } } 2 => {#1343 ▼ +"id": null +"user_id": 1 +"site_id": null +"cast_id": null } 3 => {#378 ▼ +"id": 11 +"user_id": 1 +"site_id": 4 +"cast_id": 2 } 4 => {#1343 ▼ +"id": null +"user_id": 1 +"site_id": null +"cast_id": null } ]
実行結果が以下の通りです
Illuminate\Support\Collection {#1334 ▼ #items: array:5 [▼ 0 => {#1348 ▼ +"id": 9 +"user_id": 1 +"site_id": 1 +"cast_id": 2 } 1 => {#1341 ▼ +"id": 10 +"user_id": 1 +"site_id": 2 +"cast_id": 2 } 2 => {#378 ▼ +"id": 11 +"user_id": 1 +"site_id": 4 +"cast_id": 2 } 3 => {#1343 ▼ +"id": null +"user_id": 1 +"site_id": null +"cast_id": null } 4 => {#1342 ▼ +"id": null +"user_id": 1 +"site_id": null +"cast_id": null } ] }
何故このような実行結果になってしまうのでしょうか?また、期待通りにするにはどういう記述をすればよいのでしょうか?
説明がかなりわかりにくくすみません、コメントいただければすぐに修正致します。
実際のSQLクエリになります。
"query" => "select * from `site_user` left join `cast_emails` on `site_user`.`site_id` = `cast_emails`.`site_id` and `cast_id` = ?"
回答1件
あなたの回答
tips
プレビュー