4

我有一个有效的查询生成器:

        $article = Page::where('slug', '=', $slug)
                     ->where('hide', '=', $hidden)
                     ->first();

但是如果 hidden 等于 1,我只想添加第二个 where 语句。我尝试了下面的代码,它显示了我正在尝试做的事情的逻辑,但它不起作用。

$article = Page::where('slug', '=', $slug);
if ($hidden == 1) {
    $article->where('hide', '=', 1);
}
$article->first();

我正在使用 Laravel 4,但我认为问题仍然存在于 Laravel 3 中。

4

1 回答 1

8

是的,Eloquent 和查询构建器有一点“陷阱”。试试下面的代码;)

$query = Page::where('slug', '=', $slug);

if ($hidden == 1) {
    $query = $query->where('hide', '=', 1);
}

$article = $query->first();

注意条件中 $query 的分配。这是因为第一个 where (静态调用)返回一个不同的对象到条件内的查询对象。我相信由于最近的一次提交,解决这个问题的一种方法是这样的:

$query = Page::where('slug', '=', $slug)->query();

这将返回查询对象,您可以正常执行您想要的操作(而不是重新分配 $query)。

希望有帮助。

于 2013-02-05T22:09:41.480 回答