从雄辩的关系中获取字段值

时间:2018-01-26 17:30:49

标签: php laravel-5 eloquent relationship

我在雄辩上有这种关系

public function Manufacturer() {
        return $this->hasOne('App\Models\ManufacturerModel', 'id')->select('name');
}

这会正确返回制造商名称:

{"id":1,"serialnumber":"123_1","buydate":"2018-01-26 00:00:00","offservice":null,"deleted":"0","manufacturer":{"name":"HP"}}

我想将名称检索为JSON个对象,而不是string

{"id":1,"serialnumber":"123_1","buydate":"2018-01-26 00:00:00","offservice":null,"deleted":"0","manufacturer":"HP"}

2 个答案:

答案 0 :(得分:1)

定义关系的最佳方式是:

public function Manufacturer() {
        return $this->hasOne('App\Models\ManufacturerModel', 'id');
}

然后您可以通过这种方式获得制造商名称:

$your_object->manufacturer->name;

或者添加包装器方法:

public function ManufacturerName() {
        return $this->manufacturer->name;
}

请注意,当您引用不带括号的关系时,将执行查询,并且您正在访问的是结果。如果您不想查询整个记录,可以执行以下操作:

public function ManufacturerName() {
        return $this->manufacturer()->select('name')->get()->name;
}

通过访问与括号的关系,您将获得关系定义,并且可以在执行查询之前对其进行修改。

答案 1 :(得分:0)

不是直接但你可以使用php的一点技巧来实现这个功能,例如,如果你想在字符串上下文中使用它,如下所示:

// {{ $someModel->manufacturer }}
echo $someModel->manufacturer; // or echo Manufacturer::find(1);

然后您可以使用__toString模型中的Manufacturer魔术方法执行此操作,如下所示:

public function __toString()
{
    return $this->name;
}

在这种情况下,即使在json_encode($manufacturer)上也只会name,所以为什么不使用$model->manufacturer->name;