我遇到了以下問題:我寫了一個動態特征,它生成了一個雄辯的查詢。到目前為止,這有效。但是由于資料集可能非常大(行 可能的關系),我想對其進行分頁。只要我不嘗試對其進行排序,這也不是問題。在主模型上排序也很容易,但是,當我想根據關系的屬性進行排序時(假設關系是成員并且我想根據名稱進行排序),我遇到了問題。
我天真地忽略了關系的急切加載,當然這行不通。我也想盡可能避免連接,因為我真的只需要資料集和我的關系。
return $model->sortBy('member.name')->offset(0)->take(50)->get();
顯然不起作用,因為我需要在 sortBy 之前使用 get()。然而,將其重寫為
return $model->get()->sortBy('employee.PRSVORNAME')->offset(0)->take(50)->get();
也不起作用,因為我得到了一個無法分頁的集合(請注意,我沒有在此處包含分頁(),因為這與 offset()->take()->get() 產生的問題基本上相同;
有沒有辦法在不必使用連接的情況下做到這一點?
uj5u.com熱心網友回復:
在這種情況下,我想根據關系的列進行排序,我所做的是呼叫關系模型對其進行排序:
因此,假設您的查詢是:
$myQuery = $model->with('employee')->where('this_column','=','that_column');
之后是排序部分。對于示例,讓我們假設您的關系模型被稱為Employee
$myQuery->orderBy(
Employee::select('id')
->whereColumn('employee_id', 'employee.id')
->orderBy('PRSVORNAME', 'asc')
->limit(1),
'asc'
);
return $myQuery->get();
之后,您可以添加分頁或任何您喜歡的內容,因為您的收藏已經在 ->get()
對于上面的例子,我假設兩個表之間的外鍵是id列。如果它是另一列,您可以在whereColumn
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/379622.html
