如何让Laravel Join返回这样的数据?

时间:2016-10-02 21:20:13

标签: php postgresql laravel

如何使用leftJoin或rightJoin的连接从这样的数据库中返回数据?

{
"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();

我得到的数据不是我想要的,所以请让我知道最好的方法是什么。 任何帮助赞赏。感谢

1 个答案:

答案 0 :(得分:4)

好吧,加入查询不会返回数据 - 它只能获取平面数据或限制查询结果。你应该在User模型中添加一个像这样的关系方法:

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

然后像这样重写查询方法链:

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

with模型方法中的User会为相关表格生成热切加载约束查询,并为每个模型带来Collection模型Message User模型。