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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

1508閲覧

Laravel クエリビルダで多対多のデータ取得方法について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/10/10 15:35

編集2021/10/13 15:50

#概要
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に配列でデータが取れているのかがいまいち理解できません。
イメージ説明

どなたかアドバイスいただけないでしょうか?
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

sql

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)

投稿2021/10/13 12:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問