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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Laravel

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

PHP

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

Q&A

1回答

2643閲覧

【Laravel】foreach内で中間テーブルから値を取得したい

zono3

総合スコア16

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Laravel

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

PHP

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

0グッド

0クリップ

投稿2021/08/17 11:28

編集2021/08/18 08:30

前提・実現したいこと

【前提】
categoriesテーブル

idname

listsテーブル

idname...

categories_listsテーブル(中間テーブル)

idcategory_idlist_id

【実現したいこと】
・folderの中に該当するcategoryを。categoryの中に該当するlistを表示させ表示させたい。(今回、categoryの中に該当するlistを表示させる段階でつまずいております。)

該当のソースコード

board.blade.php

php

1@foreach($folders as $folder) 2<li class="mb-4"> 3 <div class="parent folder-name" data-toggle="collapse" data-target="#target{{ $folder->id }}" aria-expand="false" aria-controls="#target{{ $folder->id }}"><i class="fas fa-caret-right mr-3 triangle"></i>{{ $folder->name }}</div> 4 <ul class="create-category-items p-0"> 5 @foreach($categories as $category) 6 @if($folder->id == $category->folder_id) 7 <li class="mt-3"> 8 <div class="category-left d-flex align-items-center" data-toggle="collapse" data-target="#target{{ $folder->id }}-{{ $category->id }}" aria-expand="false" aria-controls="#target{{ $folder->id }}-{{ $category->id }}"> 9 <i class="fas fa-caret-right mr-3 triangle"></i> 10 <p class="m-0">{{ $category->name }}</p> 11 </div> 12 <div class="child collapse" id="target{{ $folder->id }}-{{ $category->id }}"> 13 <ul class="p-0"> 14 15 <!-- 該当の箇所 --> 16 @foreach($category->lists as $list) 17 <li class="list-name mt-2"><a href="#">{{ $list->pivot->name }}</a></li> 18 @endforeach 19 20 </ul> 21 </div> 22 </li> 23 @endif 24 @endforeach 25 </ul> 26 </div> 27</li> 28@endforeach 29

Controller.php

php

1public function board(Request $request) 2{ 3 $folders = Folder::all(); 4 $categories = Category::all(); 5 $lists = ListItem::all(); 6 return view("/admin/board", [ 7 'folders' => $folders, 8 'categories' => $categories, 9 'lists' => $lists, 10 ]); 11} 12

Category.php

php

1class Category extends Model 2{ 3 public function folder() 4 { 5 return $this->belongsTo('App\Models\Folder'); 6 } 7 8 public function lists() 9 { 10 return $this->belongsToMany('App\Models\listItem', 'categories_lists', 'list_id', 'category_id')->withTimestamps()->withPivot('category_id', 'list_id'); 11 } 12

ListItem.php(Listテーブルのモデルです。)

php

1class ListItem extends Model 2{ 3 // Listというモデル名は使用不可のためListItemというモデル名に 4 protected $table = 'lists'; 5 6 public function categories() 7 { 8 return $this->belongsToMany('App\Models\Category', 'categories_lists', 'list_id', 'category_id')->withTimestamps()->withPivot('category_id', 'list_id'); 9 } 10

試したこと

多対多のリレーションについていろいろ調べましたが、解決に至らなかったため質問させていただきました。
具体的な解決法だけではなく、参考になりそうな記事でもよいので解決に導いていただければ幸いです。よろしくお願いします。

追記

migrationです。

categoriesテーブル

php

1class CreateCategoriesTable extends Migration 2{ 3 public function up() 4 { 5 Schema::create('categories', function (Blueprint $table) { 6 $table->increments('id'); 7 $table->integer('folder_id'); 8 $table->string('name'); 9 $table->timestamps(); 10 }); 11 } 12

listsテーブル

php

1class CreateListsTable extends Migration 2{ 3 public function up() 4 { 5 Schema::create('lists', function (Blueprint $table) { 6 $table->increments('id'); 7 $table->string('name'); 8 $table->integer('point'); 9 $table->text('description'); 10 $table->text('relation'); 11 $table->text('checklist'); 12 $table->integer('status'); 13 $table->timestamps(); 14 }); 15 } 16

categories_listsテーブル

php

1class CreateCategoriesListsTable extends Migration 2{ 3 public function up() 4 { 5 Schema::create('categories_lists', function (Blueprint $table) { 6 $table->increments('id'); 7 $table->integer('category_id'); 8 $table->integer('list_id'); 9 $table->timestamps(); 10 }); 11 } 12

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

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

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

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

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

FKM

2021/08/27 14:04

まずLaravelをおいといて、こういうデータを出したいというSQLを組み立てて、それをLaravelに当てはめていけばいいのでは?今回は多対多なのでしょうか?単にトランザクションに参照キーが二つぶら下がってるだけだとは思いますが。
zono3

2021/08/28 11:08

コメントありがとうございます。 今回は多対多です。 多対多リレーションの扱いを学ぶためにもEloquentで記述したいと考えておりますが、FKM様のおっしゃる通りSQL文での組み立てから考え直したいと思います。 ヒント等いただけましたら大変助かります。
guest

回答1

0

PHP

1$category = Category::find(1); 2 3foreach($category->lists as $list) { 4 // Do something... 5 echo $list->name; 6}

取得方法としては以下の様な感じです。

投稿2021/08/17 14:46

kai0310

総合スコア2070

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

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

zono3

2021/08/18 01:10

ご回答ありがとうございます。 その記述では解決できませんでした。modelやcontrollerなどの記述で何か問題があるのでしょうか?
kai0310

2021/08/18 08:27 編集

該当する3つのマイグレーションファイルを提示してください。質問本文は修正できます。
kai0310

2021/08/18 08:02 編集

該当する3つのマイグレーションファイルを提示してください。質問本文は修正できます。
zono3

2021/08/18 08:31

追記に記載しました。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問