【Laravel】Eloquentのリレーション② belongsTo結合について
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
Eloquentのリレーション、続いてはbelongsTo結合についてです!
hasOneは主テーブルから従テーブルを読み込むメソッドでしたが、
belongsToは逆に従テーブルから主テーブルを読み込みます!
Articleモデル編集
まずは従テーブルであるArticleモデルを編集します。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $guarded = array('id'); // ***** 開始 ***** public function author() { return $this->belongsTo('App\Models\Author'); } // ***** 終了 ***** }
app>Models/Article
主テーブルのモデルAuthorを読み込むauthorメソッドを作成します。
従テーブルから主テーブルを読み込むbelongsToメソッドをreturnします。
引数にはAuthorモデルへのパスを記述します。
ArticleController編集
続いてArticleControllerを編集します。
<?php namespace App\Http\Controllers; use App\Models\Author; use App\Models\Article; use Illuminate\Http\Request; class ArticleController extends Controller { function index() { // ***** 開始 ***** $articles = Article::all(); foreach($articles as $a) { dump( 'タイトル:' . $a->title . ' 著者:' . $a->author->name); } // ***** 終了 ***** } }
app>Http>Controllers>ArticleController.php
indexメソッドを変更しました。
hasOneの時の主テーブル(Author)と従テーブル(Article)を
逆にした感じです。
Articleモデルから全件データを読み込み、
foreach分で回し、
Articleモデルで先ほど作成したauthorを
プロパティの形で呼び出しています。
結果
ArticleControllerにてArticleモデルのみを読み込みましたが、
belongsToを使いAuthorモデルのnameを読み込むことに成功しました!
今回はここまでです、ありがとうございました〜!