假设我有以下内容;
用户模型;
class User extends Authenticatable
{
public function posts()
{
return $this->hasMany('App\Models\Socials\Post');
}
}
发布模型;
class Post extends Model
{
public function comments()
{
return $this->morphMany('App\Models\Socials\Comment', 'commentable');
}
评论模型;
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
当我使用$user = User::find($id);
和$user->posts()
时,它会返回用户的所有帖子,但如果我使用此方法$user->posts()->comments()
则会返回此消息Method Illuminate\Database\Query\Builder::comments does not exist
。
问题是如何在上述帖子中获得用户的所有评论?
答案 0 :(得分:1)
变化:
$user->posts()->comments();
为:
$user->posts->pluck('comments')->collapse();
该方法本身返回一个Eloquent查询构建器的实例,允许您根据需要添加或编辑查询。但是,如果您不想编辑查询,则可以将属性作为属性访问,Laravel将处理查询的执行。
基本上,$user->posts
实际上是在后台变成$user->posts()->get()
。
归功于@JonasStaudenmeir。