如何使用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();
我得到的数据不是我想要的,所以请让我知道最好的方法是什么。 任何帮助赞赏。感谢
答案 0 :(得分:4)
好吧,加入查询不会返回数据 - 它只能获取平面数据或限制查询结果。你应该在User
模型中添加一个像这样的关系方法:
public function messages()
{
return $this->hasMany(Messages::class, 'user_id');
}
然后像这样重写查询方法链:
$users = User::with('messages')
->get();
with
模型方法中的User
会为相关表格生成热切加载约束查询,并为每个模型带来Collection
模型Message
User
模型。