我有两个数据表通过归属多关系相互关联。当我只选择两个列键从其 api 控制器获取数据时['id','title']
但它在响应对象中返回一些额外的数据。
model
代码:
public function place(){
return $this->belongsToMany(Place::class,'city_place')->select(array('id', 'title'));
}
controller
代码:
public function ofcity($id)
{
$city=City::findOrFail($id);
return new CityResource( $city->place()->get());
}
在此处输入图像描述
必须在字段前面指示表的名称。
型号 地点代码:
protected $columns = ['places.id', 'places.title']; //all column for select
public function scopeExclude($query, $value = [])
{
return $query->select(array_diff($this->columns, (array) $value));
}
型号城市代码:
public function place()
{
return $this->belongsToMany(Place::class,'city_place', 'city_id', 'place_id');
}
控制器代码:
public function ofcity($id)
{
$cities = City::findOrFail($id)->place()->exclude(['featured_image'])->get()->toArray();
return response()->json(['cities' => $cities], 200);
}
在排除中,跳过所有不需要显示的字段。
感谢这里的每个人帮助我,但上述解决方案都不起作用。在尝试了不同的功能并为此花费了数小时后,我想通了。
型号 地点代码:
公共函数 place(({
return $this->belongsToMany(Place::class,'city_place','city_id','place_id')->select(array('places.id', 'places.title'));
}
控制器代码:
城市公共功能($id( { $city=城市::查找或失败($id(;
返回 new CityResource( $city->place((->get((->map(function ($item,$key( {
return ['id' => $item['id'],'title'=>$item['title']];
})
);