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

Mar*_*tan 3 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
}
Run Code Online (Sandbox Code Playgroud)

这是我通常使用的:

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

我得到的数据不是我想要的,所以请告诉我什么是最好的方法。任何帮助表示赞赏。谢谢

Fil*_*ski 5

那么,join 查询不会返回诸如数据之类的 - 它只能获取平面数据或限制查询结果。您应该像这样在User模型中添加一个关系方法:

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

然后像这样重新编辑查询方法链:

$users = User::with('messages')
        ->get();
Run Code Online (Sandbox Code Playgroud)

其中,withUser模型的方法会产生相关的表和意志渴望负荷contraint查询带给你一个Collection模型的Message模型,每个User模型。