2016-10-02 73 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

这有帮助吗? –