laravel使用查询构建器而不链接

时间:2013-02-05 22:05:33

标签: php laravel laravel-4

我有一个有效的查询构建器:

        $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中。

1 个答案:

答案 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)。

希望有所帮助。