2017-01-12 18 views
-1

私は多態性の関係で構築された同様のシステムを持っています。 Likesを取得するときにlikeable_typeのモデルを読みたいと思います。 何をする必要がありますか? は、私は私のようなモデルにLaravel 5.2 - 多型関係の熱い遠隔モデル

protected $with = ['Post']; 

または

protected $with = ['App\Post']; 

を追加しようとしましたが、私が得るすべてがある:未定義のメソッドを照らし\ Databaseへ

コール\クエリー\ビルダー::ポスト()

同じようなモデル:

class Like extends Model 
{ 
    use SoftDeletes; 

    protected $table = 'likeables'; 

    protected $fillable = [ 
     'user_id', 
     'likeable_id', 
     'likeable_type', 
    ]; 


    /** 
    * Get all of the owning likeable models. 
    */ 
    public function likeable() 
    { 
     return $this->morphTo(); 
    } 

} 

ポストモデル:

class Post extends Model 
{ 

    protected $fillable = [ 

     'picture', 
     'description' 

    ]; 


    /** 
    * 
    * a post belongs to one user 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function user(){ 

     return $this->belongsTo('App\User'); 

    } 


    /** 
    * 
    * a post has many comments 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 


    /** 
    * Get all of the post's likes. 
    */ 
    public function likes() 
    {   

     return $this->morphMany('App\Like', 'likeable'); 
    } 


    /** 
    * 
    * Simple Like System checks if liked 
    * 
    * @return bool 
    */ 
    public function getIsLikedAttribute() 
    { 
     $like = $this->likes()->whereUserId(Auth::id())->first(); 
     return (!is_null($like)) ? true : false; 
    } 


} 
+0

私たちにあなたのモデルを表示してください。 – Moak

+0

今質問に追加します。 – Chriz74

+0

'protected $ with = ['likeable']'を試したことがありますか?通常、熱心な読み込みの場合、メソッド名 – Moak

答えて

-1

を照らし\データベース\クエリー\ビルダー::ポスト()

あなたはポストについての問題を抱えています。

あなたは "firstOrFailed()" でこのように件のデータを取ることができます:

$データ= TABLE_NAME ::( '$ ID'、$ IDの 'のような') - > firstOrFailed();

または "get()"メソッド。 (これは関連して変更されます)

これは多形的な関連性に関するチュートリアルです。 https://laravel.com/docs/5.3/eloquent-relationships#polymorphic-relations

問題を解決できない場合は、コントローラ、表示ページ、移行などの詳細情報を入力してください。

0

テーブルの名前を 'likeables'から 'likes'に変更してこの問題を解決しました。

$post = Post::find(6); 

dd ($post->likes()->with('likeable')->get()); 

かは、私はこのように言っていたエンティティを取得できます:

$like = Like::find(1); 

$likeable = $like->likeable; 

dd($likeable); 

-

protected $table = 'likeables';>protected $table = 'likes';

は今、私はこのようななどを取得遠い関係を取得することができますテーブルの名前を変更する前に結果はNullでした.. 私はまだどのようにすべてのエンティティを取得するために理解しなければなりませんユーザー。

関連する問題