我正在嘗試在 Laravel/Eloquent 中編寫一個包含計算列的查詢。該查詢的結果集需要根據計算的列進行排序和/或過濾。查詢是; SELECT member_names.id, member_names.member_id, member_names.membership_owner, Concat(member_names.last_name, " ", suffixes.description, ", ", surnames.description, " ", member_names.first_name, " ") as name, vip_codes.description, membership_types.description, membership_statuses.description FROM member_names LEFT JOIN members ON member_names.member_id = members.id LEFT JOIN surnames ON member_names.surname_id = surnames.id LEFT JOIN suffixes ON member_names.suffix_id = suffixes.id LEFT JOIN vip_codes ON member_names.vip_code_id = vip_codes.id LEFT JOIN membership_types ON members.membership_type_id = membership_types.id LEFT JOIN membership_statuses ON members.membership_status_id = membership_statuses.id WHERE member_names.membership_owner=1ORDER BY name;計算的列是name并且是用以下計算的;Concat(member_names.last_name, " ", suffixes.description, ", ", surnames.description, " ", member_names.first_name, " ") as name我相信這個是獨一無二的,因為它需要訪問后綴和姓氏表來計算列。到目前為止,我看到的其他答案都保留在表格中。我有member_names、members、surnames、suffixes、vip_codes、membership_types和membership_statuses的模型。它們都已正確連接。換句話說,我可以發出一個簡單的查詢MemberName::->orderBy('last_name', 'asc')->orderBy(first_name, 'asc')->where('membership_owner', 1)->paginate(10)并且下游可以毫無問題地解決控制器或視圖中的其他表查找。我的問題是我需要包含查詢中上游名稱的數據。我的替代方法是將其轉換為數據庫中的視圖,但我不想弄亂數據庫。感謝 Marcin Nabia?ek 的建議。像魅力一樣工作。對于我們新手來說,查詢的最終版本如下;$name = 'Concat(member_names.last_name, " ", suffixes.description, ", ", surnames.description, " ", member_names.first_name, " ")';vip_codes、membership_types 和 members_statuses 的 LEFT JOIN 直到視圖中的更下游才需要,因此此時可以將它們排除在外,而 Eloquent 會按預期解決它。有關更多信息,請參閱 Laravel 手冊:https ://laravel.com/docs/5.8/queries
1 回答

墨色風雨
TA貢獻1853條經驗 獲得超6個贊
如果您已經將他們的查詢寫成 Eloquent 并且您需要添加這一列,您可以執行以下操作:
$name = 'Concat(member_names.last_name, " ", suffixes.description, ", ", surnames.description, " ", member_names.first_name, " ")';
MemberName::selectRaw("member_names.*, {$name} as name")
// here you put joins and other code you need
->orderByRaw($name)
->paginate(10)
- 1 回答
- 0 關注
- 120 瀏覽
添加回答
舉報
0/150
提交
取消