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
- 有關模型關聯的問題模型
- 關於資料一致性問題的解決方法?
- laravel Eloquent模型 關於模型關聯屬性獲取Laravel模型
- laravel orm 關聯問題LaravelORM
- spring boot 2.0.0由於版本不匹配導致的NoSuchMethodError問題解析Spring BootError
- 使用mybatis-plus,由於表名關鍵字導致插入資料失敗MyBatis
- 關於log4j.jar導致的中文問題JAR
- Linux平臺由於OPROCD程式導致伺服器重啟的問題Linux伺服器
- MYSQL 5.7 升級 8.0 後的 由於字符集導致的大問題 ?MySql
- ORACLE資料檔名導致的奇怪問題Oracle
- 伺服器由於防火牆問題導致埠不通解決方法伺服器防火牆
- 由於字符集問題導致 Package Body created with compilation errors.PackageError
- 關於RAC共享儲存兩個節點磁碟裝置名稱不一致的問題
- 關於 Laravel 分頁的問題?Laravel
- 關於盒模型相關的問題模型
- 由一條sql語句導致的系統IO問題SQL
- 優化由直方圖資訊導致的sql效能問題優化直方圖SQL
- 關於 maatwebsite/excel 匯出不能識別中文檔名稱的問題WebExcel
- 錯誤的使用者名稱密碼登入導致的資料庫效能問題密碼資料庫
- 關於 iconv 轉碼導致資料丟失的問題
- 關於JAVAMAIL導致JSP伺服器停止的問題!急JavaAIJS伺服器
- Laravel Eloquent 的關係模型聯動Laravel模型
- 檔案上傳經由ZUUL轉發,導致的 檔名(OriginalFilename)亂碼問題Zuul
- openGauss 由於RemoveIPC未關閉導致資料庫crashREM資料庫
- 記錄一個由於倉庫層錯誤導致軟刪除失效的問題
- dba工作一定要細心:由於不細心導致的一個小問題
- 關於 Laravel 遷移遇到的問題Laravel
- 由於CND cache導致的小程式使用者資訊串號的線上問題回顧
- [分享]關於新版本 Composer 會導致 Class not found 的問題
- 深度剖析 | 關於資料鎖定和讀取一致性問題
- Session一致性問題Session
- Laravel多對多模型關聯Laravel模型
- Laravel 初識--模型關聯 2Laravel模型
- 【Cocos2d-x】遮蔽Emoji並解決由於Emoji導致的崩潰問題
- 由Nginx的DNS快取導致的訪問404NginxDNS快取
- AIX下由於nfs故障導致oracle hangAINFSOracle
- 關於SDWebImage載入高清圖片導致app崩潰的問題WebAPP