【问题标题】:laravel using query builder without chaininglaravel 使用没有链接的查询生成器
【发布时间】:2013-01-20 23:46:51
【问题描述】:

我有一个可以工作的查询生成器:

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

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    是的,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)。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 2022-01-20
      • 2014-12-06
      • 2016-11-16
      • 2017-05-06
      • 2018-07-03
      • 2016-04-16
      • 2015-12-13
      • 1970-01-01
      相关资源
      最近更新 更多