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

Al_*_*Al_ 4 php laravel laravel-4

我有一个工作的查询构建器:

        $article = Page::where('slug', '=', $slug)
                     ->where('hide', '=', $hidden)
                     ->first();
Run Code Online (Sandbox Code Playgroud)

但我想只添加第二个where语句,如果隐藏等于1.我已经尝试了下面的代码,它显示了我正在尝试做的逻辑,但它不起作用.

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

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

Odd*_*man 8

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

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

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

$article = $query->first();
Run Code Online (Sandbox Code Playgroud)

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

$query = Page::where('slug', '=', $slug)->query();
Run Code Online (Sandbox Code Playgroud)

这将返回查询对象,您可以按照正常情况执行所需操作(而不是重新分配$ query).

希望有所帮助.