2016-10-02 43 views
2

如何使用leftJoin或rightJoin連接從這樣的數據庫中獲取數據?如何讓Laravel加入返回這樣的數據?

{ 
"users": [{ 
    "id": 129, 
    "name": Daniel, 
    "messages": [{ 
     "message_id":1, 
     "user_id": 120, 
     "subject": "some text A", 
     "message": "Some text message A" 
    },{ 
     "message_id":2, 
     "user_id": 120, 
     "subject": "some text", 
     "message": "Some text message S" 
    },{ 
     "message_id":3, 
     "user_id": 120, 
     "subject": "some text", 
     "message": "Some text message S" 
    }], 
}, { 
    "id": 2, 
    "user_id": 120, 
    "name": "Emmy", 
    "messages":[{ 
     "message_id":25, 
     "user_id": 120, 
     "subject": "some text C", 
     "message": "Some text message C" 
    }] 

}], 
"count": 2 
} 

這是我通常使用:

  $users = DB::table('users') 
      ->leftJoin('messages', function ($join) { 
       $join->on('users.id', '=', 'messages.user_id'); 
      }) 
      ->get(); 

我得到的數據是不是我想要的,所以請讓我知道什麼是做到這一點的最好辦法。 任何幫助表示讚賞。謝謝

回答

4

那麼,連接查詢不會返回諸如數據 - 它只能得到平坦的數據或限制查詢結果。你應該在User模型像這樣加關係的方法,如:

public function messages() 
{ 
    return $this->hasMany(Messages::class, 'user_id'); 
} 

然後重新編輯查詢方法鏈是這樣的:

$users = User::with('messages') 
     ->get(); 

其中withUser模型的方法會產生躍躍欲試的負載對相關表進行約束查詢,並將爲您帶來Collection型號的Message型號到各個User型號。

+0

這有幫助嗎? –