作品
$comments = App\Post::find(1)->comments()->where('title', 'foo');
这不起作用
$comments = App\Post::where('id', '=', $id)
->where('column', '=', $val)
->comments()->where('title', 'foo');
期望获得按id
和column
答案 0 :(得分:1)
可能您收到undefined method
错误。您正试图在Eloquent Builder类上调用comments()
。这将解决您的问题。
$comments = App\Post::where('id', '=', $id)
->where('column', '=', $val)
->where('title', 'foo')
->first()->comments;
答案 1 :(得分:0)
where子句不返回集合,您应首先获得一个集合,之后您可以应用其他子句。
即:
$comments = App\Post::where('column', $val)
->where('id', $id)
->first()
->comments
->where('title', 'foo');
此外'='
是where
子句的默认值,因此可以省略它们。
答案 2 :(得分:0)
您可以向Model::with()
(laravel documentation)的关系添加其他查询,以反对返回的元素:
$comments = App\Post::where("id", $id)
->where("column", $val)
->with(["comments" => function ($query) {
$query->where("title", "foo");
}])
->first()
->comments;
答案 3 :(得分:0)
每当您尝试访问模型函数时,您都需要模型类的对象。
在第一种情况下,你有模型对象,所以你可以在那之后添加查询,这样可以很好地工作。
在第二种情况下,
App\Post::where('id', '=', $id)
->where('column', '=', $val)
->comments()
->where('title', 'foo');
在应用模型函数Post
之前,需要获取comments()
对象。但是在这里,您将获得Query Builder。因此,您无法在其上应用模型功能。
如果只搜索您的行,则可以使用find()
或first()
功能。
如果有多个结果,不是一个好的解决方案,但你可以迭代for循环。
$posts = App\Post::where('id',$id)
->where('column',$val)
->get();
foreach($posts as post){
// Acess like $post->comments
}
答案 4 :(得分:0)
如果您有人际关系,可以加入Eager Loading并传递一项功能,为查询添加条件,例如:
$comments = App\Post::with([‘comments’ => function($query) {
$query->where(‘title’, ‘foo’);
}])->where(‘column’, $val)->find($id);