簡體   English   中英

Laravel 5.6雄辯的ORM所在的連接表

[英]Laravel 5.6 Eloquent ORM where join table

我正在處理雄辯的ORM集合和查詢生成器。 我試圖弄清楚如何在集合中(如在查詢生成器中)加入和使用“ where”。

例如,我有下表:

用戶數

ID  |  Name  |  Last name
-------------------------
 1  | Martin | Fernandez
 2  | Some   | User

人數

ID  |  Nick  |  User_ID  |  Active
----------------------------------
 1  | Tincho | 1         |  1

公司

ID  | Name   | User_ID   |  Active
----------------------------------
 1  | Maramal| 1         |  0
 2  | Some   | 2         |  1

這是一個示例,我正在處理的表每個都有30多個列。 我想選擇所有活動的用戶。

通常我會這樣查詢:

SELECT *
FROM users
LEFT JOIN persons ON users.id = persons.user_id
LEFT join companies ON users.id = companies.user_id
WHERE persons.active = 1
OR companies.active = 1

可以將其轉換為Laravel查詢生成器,例如:

DB::table('users')
   ->leftJoin('persons', 'users.id', '=', 'persons.user_id')
   ->leftJoin('companies', 'users.id', '=', 'companies.user_id')
   ->where('persons.active', 1)
   ->orWhere('companies.active', 1)
   ->get(); 

但是我要使用的是Laravel Eloquent ORM集合,到目前為止,我正在執行以下操作:

$users= User::orderBy('id',' desc')->get();

foreach($users as $k => $user) {
    if($user->company && !$user->company->active || $user->person && !$user->person->active) {
        unset($users[$k]);
    }
    ... and here a lot of validations and unsets ...
 }

但是我知道到這一點,我已經抓住了所有用戶,而不是那些活躍的用戶。

如何實現集合中查詢生成器的功能? 提前致謝。

應該這樣做:

$users = User::whereHas('companies', function($q) {
    $q->where('active', true);
})->orWhereHas('persons', function($q) {
    $q->where('active', true);
})->with(['companies', 'persons'])->orderBy('id', 'desc')->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM