【问题标题】:Laravel relationship return parent twiceLaravel 关系两次返回父级
【发布时间】:2018-11-05 18:01:59
【问题描述】:

我有两个模型和一对一关系如下:

class Property extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class, 'user_id');
    }
}

class User extends Authenticatable
{
    public function property()
    {
        return $this->hasOne(Property::class, 'user_id');
    }
}

当我想从 Property 访问 User 时,我在返回值中有两次用户数组:

$property = Property::where('id', $id)->first();

return response()->json([
                'property' => $property,
                'user' => $property->user
            ], 201);

输出:

{
    "property":{
        "id":1,
        "name":"test",
        "user":{
            "id":1,
            "name":"arash"
        }
    },
    "user":{
        "id":1,
        "name":"arash"
    }
}

这是怎么回事?为什么属性中有第一个用户?

【问题讨论】:

  • 您能否展示一下 a) 如何查询 $property b) Property 模型
  • 问题已更新...检查Property模型@devk的头等舱
  • 您可能想要这样做:['property' => $property, 'user' => $property->user()->first()]$hidden 属性也可以,但以后可能会导致一些无意的副作用

标签: laravel model relationship


【解决方案1】:

这就是 Laravel 中序列化的工作方式。
你可以把它隐藏在json中

class Property extends Model
{
    protected $hidden = ['user'];

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id');
    }
}

【讨论】:

  • 谢谢。我可以通过这种方式隐藏一个属性......但是为什么模型中有第二个数组?
  • 它只是公共函数 user() { return $this->belongsTo(User::class, 'user_id'); } 来自您的模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 2014-08-21
  • 2016-06-21
相关资源
最近更新 更多