0
是否有條件地鏈接PHP/Laravel中的方法或通過函數傳遞方法鏈是可能的?通過函數鏈接查詢的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()
調用,當然包括不想要的結果,而不管其他鏈式方法如何。這需要嵌套先進的方法as described in Laravel docs。
應該可以只返回$ query;只是在Object上進行操作,在上面的例子中,返回可能工作的where()方法的結果,因爲它應該是$ this,但無論如何,您都可以在所有您想要的位置傳遞$ query對象,這就是查詢生成器的一個點。你也應該能夠克隆它並在分離的副本上進行更改,因此對於總共具有相同邏輯的情況,您將在哪裏更改選擇以進行計數並移除限制等等。 – ArtisticPhoenix
@ArtisiticPhoenix - '$ query'是一個通過引用傳遞的對象,因此甚至不需要從該函數返回。上面的代碼應該可以工作。而整個'$ query = $ query'也是多餘的。 –
我想我已經明白了。這不是方法鏈接或傳遞$查詢對象的問題。我認爲問題是方法的順序。我在基本查詢中有一個'()()'調用,這似乎阻止了以後'where()'方法的生效。這聽起來是對的嗎? – glasstree