Laravel 關聯模型由於名稱一致性導致的問題
1. 定義關聯模型
在Laravel裡面,我們可以通過定義以下Model來完成關聯查詢。
class MyPost extends Eloquent { public function myPostInfo () { return $this->hasOne('MyPostInfo'); } } class MyPostInfo extends Eloquent {}
2. 使用關聯模型
這裡myPostInfo()
用的是Camel命名規則,但是我們在讀取某一個PostInfo的時候可以用Snake規則。如下面程式碼都是可行的:
$post = MyPost::find(1); $post_info = $post->myPostInfo; // example 1 $post_info = $post->my_post_info; // example 2
Laravel允許上述兩種方法,但是沒有合理的處理使用兩種命名造成的衝突。
3. 快取失效
如果我們同時使用了上述兩個例子,就會使其中一個快取失效。在Model的relations變數中,快取了已經讀取過的關聯Model,但是當我們用不同規則的名字去讀取的時候,卻會使得前一個快取失效。例如
$post_info = $post->myPostInfo; // $post->relations = [‘myPostInfo’ => ..]; $post_info = $post->my_post_info; // $post->relations = [‘myPostInfo’ => …, ‘my_post_info’ => …];
所以如果不希望快取失效,得在專案中只使用一種命名方法去讀取關係模型。Laravel推薦的是Camel Case.
4. toArray() 方法失效
如果同時使用了兩者,另外一個問題就是導致Model::toArray()
失效。因為toArray()
方法首先去relations
中查詢Snake Case命名的關聯模型,沒有的話才去看Camel Case的。
所以如果用到了toArray()
方法來轉換Model,切忌同時使用兩者。
5. 容易犯錯的位置
最容易犯錯的程式碼是這樣的:
MyPost::with(‘myPostInfo’)->get();
在使用With去eagerLoad關聯模型時,必須使用和定義方法同名的key去讀取,那麼這樣讀取出來的方法只能是Camel Case的key。其他地方就只能用
$my_post->myPostInfo;
來保證不出問題。
相關文章
- 關於 Laravel mix 導致 Bootstrap 失效的問題Laravelboot
- 關於 SSR 內容一致性的問題
- spring boot 2.0.0由於版本不匹配導致的NoSuchMethodError問題解析Spring BootError
- 有關模型關聯的問題模型
- laravel orm 關聯問題LaravelORM
- 檔案上傳經由ZUUL轉發,導致的 檔名(OriginalFilename)亂碼問題Zuul
- 使用mybatis-plus,由於表名關鍵字導致插入資料失敗MyBatis
- MYSQL 5.7 升級 8.0 後的 由於字符集導致的大問題 ?MySql
- laravel Eloquent模型 關於模型關聯屬性獲取Laravel模型
- 伺服器由於防火牆問題導致埠不通解決方法伺服器防火牆
- 關於 iconv 轉碼導致資料丟失的問題
- java由於越界導致的報錯Java
- 關於 maatwebsite/excel 匯出不能識別中文檔名稱的問題WebExcel
- 關於 Laravel 分頁的問題?Laravel
- [分享]關於新版本 Composer 會導致 Class not found 的問題
- openGauss 由於RemoveIPC未關閉導致資料庫crashREM資料庫
- 關於盒模型相關的問題模型
- a-select由於位置不夠,導致下拉選單擋住搜尋框的問題
- 記錄一個由於倉庫層錯誤導致軟刪除失效的問題
- 【Cocos2d-x】遮蔽Emoji並解決由於Emoji導致的崩潰問題
- 關於 Laravel 遷移遇到的問題Laravel
- 深度剖析 | 關於資料鎖定和讀取一致性問題
- Session一致性問題Session
- 由於無法分配ip而導致的FailedCreatePodSandBoxAI
- 由Nginx的DNS快取導致的訪問404NginxDNS快取
- laravel 模型關聯查詢的 belongsToManyLaravel模型
- 關於lnmp配置laravel專案的問題?LNMPLaravel
- echarts圖由於容器隱藏導致圖表不顯示問題解決辦法Echarts
- 由於CND cache導致的小程式使用者資訊串號的線上問題回顧
- 關於沒有熔斷降級導致服務重啟問題
- 關於Android中使用BottomNavigationView切換橫屏導致返回主頁的問題AndroidNavigationView
- Laravel 初識--模型關聯 2Laravel模型
- Laravel多對多模型關聯Laravel模型
- oracle兩節點RAC,由於gipc導致某節點crs無法啟動問題分析Oracle
- 由於基本資料型別使用姿勢不對導致的線上"死迴圈"問題排查資料型別
- 【踩坑】spring mvc在接收請求引數時由於大小寫問題導致的接收失敗SpringMVC
- 連結器 ld 名稱的由來
- ANALYZE導致的阻塞問題分析
- 記憶體模型是怎麼解決快取一致性問題的?記憶體模型快取