我有一个有效的查询构建器:
$article = Page::where('slug', '=', $slug)
->where('hide', '=', $hidden)
->first();
但是我想只添加第二个where语句,如果hidden等于1.我已经尝试了下面的代码,它显示了我正在尝试做的逻辑,但它不起作用。
$article = Page::where('slug', '=', $slug);
if ($hidden == 1) {
$article->where('hide', '=', 1);
}
$article->first();
我正在使用Laravel 4,但我认为问题仍然存在于Laravel 3中。
答案 0 :(得分:8)
是的,Eloquent和查询构建器有一点“陷阱”。请尝试下面的代码;)
$query = Page::where('slug', '=', $slug);
if ($hidden == 1) {
$query = $query->where('hide', '=', 1);
}
$article = $query->first();
注意在条件中分配$ query。这是因为第一个(静态调用)将不同的对象返回到条件中的查询对象。解决这个问题的一种方法,我相信由于最近的提交,就像这样:
$query = Page::where('slug', '=', $slug)->query();
这将返回查询对象,您可以按照正常情况执行所需操作(而不是重新分配$ query)。
希望有所帮助。