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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

509閲覧

Polymorphic RelationでのEager Loadについて

math346613

総合スコア24

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/12/19 22:08

異なるrelationをもつ場合にEager Loadを実現したい

下記のような関係においてLike Modelに関してEager Loadをします

$likes = Like::with([ 'likeable', 'likeable.user', 'likeable.user.userinfo', ])->get();

とすると

Call to undefined relationship [user] on model [App\Book].

とのエラーメッセージが出ます。これはBook Modelにはuser relationが存在しないからですが
Book Modelの時はeager loadのlikeabke.user,likeable.user.userinfoを読み込まないような処理の実装方法を教えていただきたいです.

#Modelの関係

php

1class Like extends Model 2{ 3 protected $fillable = [ 4 'user_id', 5 'likeable_type', 6 'likeable_id', 7 ]; 8 9 public function likeable() 10 { 11 return $this->morphTo(); 12 } 13 14 public function user() 15 { 16 return $this->belongsTo('App\User'); 17 } 18} 19

php

1class Reply extends Model 2{ 3 protected $fillable = [ 4 'replyable_id', 5 'replyable_type', 6 'user_id', 7 'body' 8 ]; 9 10 public function replyable() 11 { 12 return $this->morphTo(); 13 } 14 15 public function likes() 16 { 17 return $this->morphMany('App\Like','likeable'); 18 } 19 20 public function user() 21 { 22 return $this->belongsTo('App\User')->withDefault([ 23 'name' => 'ゲスト', 24 ]); 25 } 26}

php

1class Comment extends Model 2{ 3 protected $fillable = [ 4 'commentable_id', 5 'commentable_type', 6 'user_id', 7 'type', 8 'body', 9 ]; 10 11 public function commentable() 12 { 13 return $this->morphTo(); 14 } 15 16 public function replies() 17 { 18 return $this->morphMany('App\Reply','replyable'); 19 } 20 21 public function likes() 22 { 23 return $this->morphMany('App\Like','likeable'); 24 } 25 26 public function user() 27 { 28 return $this->belongsTo('App\User')->withDefault([ 29 'name' => 'ゲスト', 30 ]); 31 } 32}

php

1class Article extends Model 2{ 3 use \Conner\Tagging\Taggable; 4 5 protected $fillable = [ 6 'user_id', 7 'title', 8 'body', 9 'like_count', 10 ]; 11 12 public function user() 13 { 14 return $this->belongsTo('App\User'); 15 } 16 17 public function likes() 18 { 19 return $this->morphMany('App\Like','likeable'); 20 } 21 22 public function comments() 23 { 24 return $this->morphMany('App\Comment','commentable'); 25 } 26}

補足情報(FW/ツールのバージョンなど)

Laravel5.7

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

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

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

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

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

guest

回答1

0

ベストアンサー

BookモデルにUserリレーションをつけて、こう書いておきます。

return new User;

BookのUserリレーションは常に空のオブジェクトが戻ります。
その子になるUserinfoは、User側のリレーション定義次第ですが普通はnullになります。nullで都合が悪ければUserモデルのUserinfoリレーションに ->withDefault を足しておきます。

投稿2018/12/20 00:06

編集2018/12/20 00:07
mihit

総合スコア61

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

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

math346613

2018/12/20 04:03

ありがとうございます。ためになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問