我在尝试使用来自雄辩关系的数据时遇到了问题。我在帖子模型中定义了一个关系。
class post extends Model
{
//
protected $fillable = ['title', 'contents', 'user_id', 'status'];
public function users(){
return $this->belongsTo('App\User');
}
}
我正试图从我的控制器访问这种关系,如下所示:
public function showBlog(){
$post = post ::where('status', 1)
->users()
->orderBy('id', 'desc')
->paginate(3);
return view ('blog')
->with('posts', $post);
}
但是我收到了这个错误: 调用未定义的方法Illuminate \ Database \ Query \ Builder :: users()
我该如何解决这个问题?我正在使用laravel 5.3
答案 0 :(得分:0)
因为关系是模型的行为,所以您获得的是查询构建器实例,因为您只是构建查询。框架仍在构建查询,并且不确定它将从中获得的结果或模型,这对于建立关系是必要的。
在访问关系之前,您需要首先生成模型Post
的实例。
试试这样:
post ::where('status', 1)->first()
->users()
->orderBy('id', 'desc')
->paginate(3);
此处方法first()
将首先为post ::where('status', 1)
运行查询Post
,并为您获取第一个结果模型,然后将在此模型实例上执行其余查询。 / p>
但是,此查询只会导致第一个结果发布的用户。如果您希望获得与用户关系的所有帖子,请尝试使用with
,如:
post::where('status', 1)->with('users')
->orderBy('id', 'desc')
->paginate(3);
这会导致帖子的用户的分页结果。
希望它会有所帮助。