鍍金池/ 問答/PHP/ Laravel 多對多關(guān)聯(lián)如何查詢未關(guān)聯(lián)的數(shù)據(jù)?

Laravel 多對多關(guān)聯(lián)如何查詢未關(guān)聯(lián)的數(shù)據(jù)?

目前有兩表,分別為如下結(jié)構(gòu):

companys

companys_table = [
    'id',
    'name',
    'created_at',
    'updated_at',
]

users_table =[
    'id',
    'name',
    'password',
    'created_at',
    'updated_at',
]

兩張表間的關(guān)系為多對多關(guān)系,中間表結(jié)構(gòu)如下

users_has_companys_table =[
    'user_id',
    'company_id'
]

功能需求是為某個公司添加員工,例如為 A 公司添加員工,管路員輸入用戶名稱的關(guān)鍵字使用遠程搜索,從后端查詢出還未加入此公司的員工(未和 A 公司建立關(guān)聯(lián)的 User),有哪些比較優(yōu)雅的查詢方法呢?

回答
編輯回答
未命名

可以在db操作里用原生態(tài)sql。這個只是一個簡單的關(guān)聯(lián)查詢。
laravel對多表關(guān)聯(lián)查詢的語法可以查一下。

2017年12月22日 03:19
編輯回答
筱饞貓

第一種方法利用“渴求加載”
在users_has_companys_table的model中定義一個函數(shù)

public function user()
    {
        //假設(shè)你的user表的命名空間為App\Models\users
        //這里定義了兩個模型的關(guān)系。即任何一個在users_has_companys_table的記錄都有唯一一個user記錄與之對應(yīng)
        return $this->hasOne('App\Models\users','user_id','id');
    }

在users_has_companys_table里面的查詢方法

$this->select('id')->where('company_id','!=',$company_id)->with('user')->get();//這里的user就是你在上面定義關(guān)系的函數(shù)名

第二種方法就是用簡單的關(guān)聯(lián)查詢,你的業(yè)務(wù)邏輯應(yīng)該只需要兩張表連接。因此就不在這寫了。
個人推薦第二種方法。所謂的優(yōu)雅就是用最簡單的方法解決問題!不要為了用它而去用它!

2018年8月21日 09:06