是否可以在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内嵌套。
答案 0 :(得分:1)
你有什么应该工作,但你可以简化它:
$query = Model::whereFoo('bar');
if ($needFoo) $query->has('foo');
queryMethod($query);
function queryMethod($query) {
$query->where('something', '<', 10);
}
$items = $query->get();
由于PHP中的对象是通过引用传递的,因此您将始终处理相同的实例。