《PHP編程:PHP中Laravel 關聯查詢返回錯誤id的解決方法》要點:
本文介紹了PHP編程:PHP中Laravel 關聯查詢返回錯誤id的解決方法,希望對您有用。如果有疑問,可以聯系我們。
在 Laravel Eloquent 中使用 join 關聯查詢,如果兩張表有名稱相同的字段,如 id,那么它的值會默認被后來的同名字段重寫,返回不是期望的結果.例如以下關聯查詢:PHP應用
PHPPHP應用
$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
priorities 和 touch 這兩張表都有 id 字段,如果這樣構造查詢的話,返回的查詢結果如圖:PHP應用
PHP應用
Laravel 關聯查詢返回錯誤的 idPHP應用
這里 id 的值不是 priorities 表的 id 字段,而是 touch 表的 id 字段,如果打印出執行的 sql 語句:PHP應用
select * from `priorities` right join `touch` on `priorities`.`touch_id` = `touch`.`id` where `priorities`.`type` = '1' order by `priorities`.`total_score` desc, `touch`.`created_at` desc
select * from `priorities` right join `touch` on `priorities`.`touch_id` = `touch`.`id` where `priorities`.`type` = '1' order by `priorities`.`total_score` desc, `touch`.`created_at` desc
查詢結果如圖:PHP應用
PHP應用
使用 sql 查詢的結果實際上是對的,另外一張表重名的 id 字段被默認命名為 id1,但是 Laravel 返回的 id 的值卻不是圖中的 id 字段,而是被重名的另外一張表的字段重寫了.PHP應用
解決辦法是加一個 select 方法指定字段,正確的構造查詢語句的代碼:PHP應用
PHPPHP應用
$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user']) ->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user']) ->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
這樣就解決了問題,那么以后就要注意了,Laravel 兩張表 join 的時候返回的字段最好要指定.PHP應用
這算不算是 Laravel 的一個 bug 呢?如果一個字段的值被同名的字段值重寫了,這種情況要不要報一個錯誤出來,而不能默認繼續執行下去.PHP應用
github 上有人也提出了同樣的問題,作者也提供了解決辦法,但并沒其他更好的方案.PHP應用
Laravel 版本:5.3PHP應用
鏈接:https://github.com/laravel/framework/issues/4962PHP應用
以上所述是小編給大家介紹的Laravel 關聯查詢返回錯誤的 id的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的.在此也非常感謝大家對維易PHP網站的支持!PHP應用