Laravel,如何确定查询构建器是否已包含" order"?

时间:2015-08-11 09:16:29

标签: php laravel laravel-5 eloquent

如果关系没有订单,我会尝试默认订单。但如果确实如此,我就不会使用默认设置。

$q = $this->items();

if (empty($q->orders)) {
    $q = $q->order();
}

请注意,order()只是a BaseModel类中的默认方法。出于某种原因,当我尝试在查询构建器上调用orders属性时,它会显示Undefined property,即使它是Builder类中的公共属性。

不确定原因,或者我如何检查这一点。

编辑:

我在路线中设置了一个完整的例子:

class Test extends \Illuminate\Database\Eloquent\Model {}

$router->get('/test', function () {
    $test = new Test;
    $q = $test->select('id')->orderBy('id', 'desc');
    $bindings = $q->getRawBindings();
    var_dump($bindings);
    return 'test';
});

转储只是吐出查询构建器对象而不是绑定?

2 个答案:

答案 0 :(得分:5)

经过一番活动,终于开始了。

所以实际上它是Eloquent\Builder而不是Query\Builder的实例所以需要这样做:

$q->getQuery()->orders

这使您可以访问查询对象。

答案 1 :(得分:1)

直接使用属性不太安全。您可以使用getRawBindings功能。

使用以下代码,您将获得展平数组中的所有绑定:

$q->getRawBindings();

现在您只需要过滤掉orders