我在雄辩上有这种关系
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"}
答案 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;