Laravel 5.2 - 在多态关系中渴望加载远程模型

时间:2017-01-12 18:57:18

标签: php laravel model polymorphism eager-loading

我有一个用多态关系构建的类似系统。 我想在检索Likes时急切地加载likeable_type的模型。 我需要做什么? 我试着添加

protected $with = ['Post'];

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

到我喜欢的模特,但我得到的是:

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: Post()

喜欢模特:

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;
    }


}

2 个答案:

答案 0 :(得分:0)

我通过重命名来自“可爱的人”的表来解决这个问题。喜欢'。

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

现在我可以检索这样的远程关系,如下所示:

$post = Post::find(6);

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

或者我可以像这样检索喜欢的实体:

$like = Like::find(1);

$likeable = $like->likeable;

dd($likeable);

在重命名表之前,结果为Null .. 我仍然需要了解如何检索用户喜欢的所有实体。

答案 1 :(得分:-1)

照亮\数据库\查询\生成器::邮政()

你有关于帖子的问题。

您可以使用" firstOrFailed()"来获取此类数据:

$数据= TABLE_NAME ::其中(' $ ID''像',$ ID) - > firstOrFailed();

或" get()"方法。 (这随着相关而变化。)

这是关于polimorphic releations的教程。 https://laravel.com/docs/5.3/eloquent-relationships#polymorphic-relations

如果您无法解决问题,请提供更多信息,如控制器,视图页面和迁移。