laravel8のwithでリレーション先のモデルを取得する時に、欲しいカラムだけを指定する。
参考URL
https://qiita.com/hayato07/items/a7809b8aae163909f8d5
https://mseeeen.msen.jp/laravel-5-5-get-specified-column-with-with/
テーブルのカラムが多いと、必要なカラムだけ指定して取得したいのだけど、->get([‘カラム1′,’カラム2’]);みたいな指定だと
withで指定したリレーション先のカラムは、メインのcategoryテーブルに無いよ!ってエラーになる。
リレーション名の後ろにコロンをつけて、カラム名をカンマ区切りで指定できるらしい。
1 |
category::with(['user:id,name','post:title'])->get() |
なぜかuserはOKで、postはNULLになった。
リレーションのキーカラムは指定しないとNULLなるみたい。’post:id,title’ならカラム指定で取得できた!
こうなると、リレーション先のリレーション先のカラムも指定したい!
ドット記法で、つなげたら行けた!
1 2 3 4 5 |
category::with([ 'user:id,name', // 投稿者 'post:id,title', // 記事のタイトル 'post.photos:id,url' // 記事の写真のURL一覧 ])->get() |
hasmanyのリレーションを記述する時にも使える!!
app/Model/User.php
1 2 3 4 5 |
// ユーザの投稿(写真URL付き) public function posts() { return $this->hasMany(Post::class)->with('photos.id.url'); } |