#概要
Laravel6.20.34
PHP 7.3.31
Vue 2.5.17
MySQL 15.1
OS Windows10
Vue + Laravelで多対多のリレーションからデータを取得し、Vueコンポーネントに一覧表示させようとしています。
表示させようとしているデータとしましては、
- ユーザー名
- ユーザーアイコン画像
- 日付
- 記事タイトル
- カテゴリ(複数個)
になります。
テーブル構成は上記画像の構成となり、画像左のquestionsテーブルからleftjoinで2個連結を行い、
中間テーブルを経由し、categoriesテーブルのカテゴリー名を取得しようとしています。
※一番最初のjoinはusersテーブルからuser名を取得しています
#現状
php
1// Modelファイル 2public function getQuestionAll() { 3 4 $questions = DB::table("questions") 5 ->join('users', 'questions.user_id', '=', 'users.id') 6 ->leftjoin('category_question', 'questions.id', '=', 'category_question.question_id') 7 ->leftjoin('categories', 'category_question.category_id', '=', 'categories.id') 8 ->select( 9 "questions.*", 10 "users.name as user_name", "users.icon_image", 11 "categories.name as cat_name" 12 ) 13 ->get(); 14 15 return $questions; 16}
上記Modelによりデータは取得できていますが、1記事にカテゴリが複数設定されている場合に、
同じデータを何個も取得してしまっています。
※画像緑マーカーの箇所のデータの数だけ同じものを取得してしまう
#試したこと
エロクアントで一度実装してみて、デバックバーにてSQLを確認してみました。
php
1select * from `questions` 2 3select `categories`.*, `category_question`.`question_id`, `category_question`.`category_id` 4from `categories` 5inner join `category_question` on `categories`.`id` = `category_question`.`category_id` 6where `category_question`.`question_id` 7in (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41)
下記SQLは発行され、意図したデータは取れていますが、
しかし、なぜ下記画像のcategoriesに配列でデータが取れているのかがいまいち理解できません。
どなたかアドバイスいただけないでしょうか?
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。