我有一个用多态关系构建的类似系统。 我想在检索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;
}
}
答案 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
如果您无法解决问题,请提供更多信息,如控制器,视图页面和迁移。