Laravel方法通过函数链接查询

时间:2014-07-25 01:57:30

标签: php laravel laravel-4 method-chaining

是否可以在PHP / Laravel中有条件地链接方法,或者通过函数传递方法链?

我想首先通过设置基本查询来控制Laravel查询构建器中的查询,然后将其传递给函数以将其他方法链接到查询。作为一个简单的例子:

$query = Model::whereFoo('bar');

if ($needFoo) {
    $query = $query->has('foo');
}

$query = queryMethod($query);

function queryMethod($query) {
    return $query->where('something', '<', 10);
}

$items = $query->get();

这似乎忽略了$query = Model::whereFoo('bar');$items = $query->get();之间的所有内容 - 两者之间的$query发生了什么似乎没有任何区别。

是否有可能/可取实现这一目标?

修改:我已经接受了以下答案,因为它回答了我提出的问题。我的问题实际上是无关的。如果它可以帮助任何人:我在基本查询中有一个流氓orWhere()调用,当然包括不需要的结果,而不管其他链式方法。这需要在高级where方法as described in Laravel docs内嵌套。

1 个答案:

答案 0 :(得分:1)

你有什么应该工作,但你可以简化它:

$query = Model::whereFoo('bar');

if ($needFoo) $query->has('foo');

queryMethod($query);

function queryMethod($query) {
    $query->where('something', '<', 10);
}

$items = $query->get();

由于PHP中的对象是通过引用传递的,因此您将始终处理相同的实例。