laravel Eloquent:關(guān)聯(lián)

laravel 官方文檔這一頁很長,講了很多東西,大概分為四個部分, 關(guān)聯(lián),關(guān)聯(lián)查詢,預(yù)加載,操作關(guān)聯(lián)模型,更新時間戳, 前面三個比較常用,第四個沒看懂,他講了怎樣添加關(guān)聯(lián)和更新關(guān)聯(lián),這還是能理解的,但是又說道解除關(guān)聯(lián)關(guān)系,懵逼,為什么要解除?如果你懂,請下面留言,很感謝。下面我大概總結(jié)一下前面三個,常用的,關(guān)聯(lián),關(guān)聯(lián)查詢,預(yù)加載。

定義關(guān)聯(lián)

它介紹了很多種情況,一對一,一對多,多對多,遠層一對多,多態(tài),多對多多態(tài),聽上去很懵逼,其實結(jié)合場景,很容易理解。
一對一 :用戶 對 用戶的個人信息
一對多: 文章 對 文章的評論
多對多 : 關(guān)聯(lián)表 比如一個權(quán)限管理 權(quán)限表 用戶表 用戶權(quán)限表
遠層一對多: 中國 對 省 對 市 這里的 中國 和市 就是他說的遠層
多態(tài): 文章有評論, 視頻有評論, 所有的評論都在評論表 通過id關(guān)聯(lián), 這就是多態(tài)
多對多多態(tài): 沒有耐心看下去

邏輯就是這樣的,還有就是反向關(guān)聯(lián),其實是一個道理,這里需要注意的是,每種關(guān)聯(lián)的參數(shù),還有反向關(guān)聯(lián)的參數(shù),如果你覺得不好記住位置,要先理解has 和 belong,和外鍵, 你在寫代碼的時候 編輯器會提示你這個位置要寫什么,A有B, 通過一個鍵連接,這個外鍵就是A的id, A屬于B,通過一個外鍵連接 那這個外鍵就是B的id。

關(guān)聯(lián)查詢

    $posts = Post::whereHas('comments', function ($query) {
        $query->where('content', 'like', 'foo%');
    })->get();

如上面的代碼,在post中,肯定有個 comments 為方法名的關(guān)聯(lián)存在,這行代碼翻譯成人話就是, 我要查詢Post, 什么樣的呢,就是用我事先定義好的comments關(guān)聯(lián)查關(guān)聯(lián)數(shù)據(jù),查出來的數(shù)據(jù)不是空的, 然后在這個基礎(chǔ)上,再加上亂七八糟的條件。

預(yù)加載

場景: 比如 每個合同有很多賬單 你定義了一個關(guān)聯(lián),contract hasMany bill

image.png

語句打印出的語句如下


image.png

但是,假如這么寫


image.png

語句是下面這樣
image.png

這就是預(yù)加載,還有所謂的n+1問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容