gpt4 book ai didi

php - Laravel 5 leftJoin on belongsTo 关系

转载 作者:搜寻专家 更新时间:2023-10-31 22:01:36 24 4
gpt4 key购买 nike

我有两个数据库表:users 和 students。学生是用户,但有额外的数据(地址)。我的 Student 模型中有 belongsTo('User') 关系。

如果我现在像这样查询 Student 模型:

$this->student
->with('user')
->first();

我得到这个结果:

{
"id": 1,
"user_id": 12,
"street": "Petershof",
"house_number": "3787",
"postal_code": "8161 NM",
"city": "Tienhoven",
"user": {
"id": 12,
"email": "bvierdag@yahoo.nl",
"first_name": "Nathan",
"last_name": "van Dijk",
"name": "Nathan van Dijk"
}
}

但是,我想将结果展平,以便用户字段位于父 (Student) 对象中。像这样:

{
"id": 1,
"user_id": 12,
"street": "Petershof",
"house_number": "3787",
"postal_code": "8161 NM",
"city": "Tienhoven",
"email": "bvierdag@yahoo.nl", // = user field
"first_name": "Nathan", // = user field
"last_name": "van Dijk", // = user field
"name": "Nathan van Dijk" // = user field
}

我尝试使用 leftJoin('users', 'user_id', '=', 'users.id') 而不是 with(),但是我失去了我的虚拟属性 'name'(在用户模型中定义) ) 并且也不能再查询 User 的关系。

我怎样才能以干净的方式实现这一目标?

最佳答案

$this->student
->leftJoin('users', 'users.id', '=', 'students.user_id')
->select(
'students.*',
'users.email',
'users.first_name',
'users.last_name',
DB::raw("concat(users.first_name, ' ', users.last_name) as name"),
)->first();

在这种情况下,您可以在选择中删除表格,例如 users.email

如果您没有指定 select,关系将以同样的方式工作,我想问题只在于用 users id 覆盖 students id 并抓取所有字段。

关于php - Laravel 5 leftJoin on belongsTo 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com