laravel 模型關(guān)聯(lián)

laravel 模型關(guān)聯(lián)

1、 一對(duì)一
    所需表:users(用戶表)、phone(電話表)
    /**
    * 獲得與用戶關(guān)聯(lián)的電話記錄。
    */
    public function phone()
    {
        return $this->hasOne(PhoneModel::class,'foreign_key','local_key');
    }
    ps:一對(duì)一, 'A'表與'B'表的關(guān)聯(lián)
2、 定義反向關(guān)聯(lián)(可用戶一對(duì)多的反向關(guān)聯(lián))
    /**
    * 獲得擁有此電話的用戶。
    */
    public function user()
    {
        return $this->belongsTo(UserModel::class,'foreign_key','owner_key');
    }    
    
    ps: owner_key:關(guān)聯(lián)模型的鍵   foreign_key:當(dāng)前模型的鍵
    個(gè)人理解:'一個(gè)用戶有多個(gè)手機(jī)號(hào)碼,但一個(gè)號(hào)碼只屬于一個(gè)用戶,在電話模型關(guān)聯(lián)用戶時(shí)就可以用反向關(guān)聯(lián),也可以用一對(duì)一關(guān)聯(lián)'
3、 一對(duì)多
    /**
    * 獲得此博客文章的評(píng)論。
    */
    public function comments()
    {
        return $this->hasMany(CommentModel::class,'foreign_key','local_key');
    }
4、 多對(duì)多
    多對(duì)多需要用到三個(gè)表: roles、users、role_user
    /**
    * 獲得此用戶的角色。
    */
    public function roles()
    {
        return $this->belongsToMany(RoleModel::class,UserRoleModel::class,'user_id','role_id');
    }
    
    ps:在UserModel模型中添加此方法
    
    個(gè)人理解:'多對(duì)多其實(shí)就是三個(gè)表之間的關(guān)聯(lián),一般用于用戶表、角色表、用戶角色表之間的關(guān)聯(lián)'
    
5、 遠(yuǎn)程一對(duì)多
    遠(yuǎn)程一對(duì)多所需的表:users(用戶表)、countries(國家表)、post(博客表)
    
    在countries模型中,新建博客關(guān)聯(lián)方法 post()
    
    /**
     * 獲得某個(gè)國家下所有的用戶文章。
     */
    public function posts()
    {
        return $this->hasManyThrough(PostModel::class, UsersModel::class,'country_id','user_id','id','id');
    }
    
    ps:'country_id':用戶表的外鍵(國家ID) 'user_id':文章表的外鍵(用戶ID) 'id':國家表(當(dāng)前模型)本地鍵(ID) 'id':用戶表本地鍵(ID)
    
    個(gè)人理解:'A'與'B'有關(guān)聯(lián)、'A'與'C'有關(guān)聯(lián),'B'與'C'沒關(guān)聯(lián),遠(yuǎn)程一對(duì)多其實(shí)就是通過'A'來實(shí)現(xiàn)'B'和'C'的查詢,

6、 官方文檔
https://laravel-china.org/docs/laravel/5.5/eloquent-relationships/1333
7、 whereHas使用
    /**
     * 關(guān)聯(lián)上級(jí)
     */
    !empty($data['parent_account']) && $model = $model->whereHas('parentUsers',function ($query) use ($data){
        //上級(jí)姓名篩選
        $query->select()->where('account','like','%'.$data['parent_account'].'%');
    });
    
    ps:主要用于在使用模型關(guān)聯(lián)時(shí),關(guān)聯(lián)表的字段作為條件去篩選
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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