Можно ли условно связывать методы в 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, , как описано в документации Laravel.
$query
- это объект, который передается по ссылке, поэтому даже не должно быть необходимости возвращаться из этой функции. Код выше должен работать. И весь этот$query = $query
тоже лишний. - person Joseph Silber   schedule 25.07.2014with()
в базовом запросе, который, похоже, помешал более поздним методамwhere()
вступить в силу. Это звучит правильно? - person glasstree   schedule 25.07.2014with
не должно мешать пунктамwhere
. - person Joseph Silber   schedule 25.07.2014get()
,paginate()
и т. д. до конца? - person glasstree   schedule 25.07.2014