亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將計算列添加到 Laravel Eloquent 模型并對該列進行排序和/或過濾

將計算列添加到 Laravel Eloquent 模型并對該列進行排序和/或過濾

PHP
牧羊人nacy 2022-07-16 10:52:18
我正在嘗試在 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)


查看完整回答
反對 回復 2022-07-16
  • 1 回答
  • 0 關注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號