我正在使用Eloquent从名为“business”的表中选择一行。任何企业都可以与一个或多个“行业”相关联。我已经在商业模式中进行了设置,以便:
public function industries() {
return $this->belongsToMany('Industry');
}
在控制器中,当我选择模型时,我急切地想要加载行业:
$mdl = Business::find($business_id);
$mdl->load('industries');
return Response::json($mdl);
返回如下内容:
{"id":123,"name":"My Business","address":"123 Easy Street","industries":[{"id":1,"name":"Technology"},{"id":7,"name":"Research"}]}
这几乎是我的需要。我希望反应看起来像这样:
{"id":123,"name":"My Business","address":"123 Easy Street","industries":[1,7]}
我知道我可以做这样的事情:
$ind = array();
foreach($mdl->industries as $industry) $ind[] = $industry->id;
$mdl->industries = $ind;
我宁愿不这样做。这很难看,它使我的代码看起来非常不合适。
我想首先这样做的原因是因为当我保存业务时我会使用这样的东西:
$mdl->industries()->sync(Input::get('industries'));
SYNC方法只接受一个ID数组,所以我宁愿进出服务器的JSON对象具有相同的格式。当我加载它时,我真的不是一个对象数组,而当我保存时,它确实不是一组id。对于这类事情是否有最佳实践或者更容易实现我正在尝试做的事情?
谢谢!
答案 0 :(得分:3)
$mdl = Business::with('industries')->find($business_id)->toArray();
$mdl['industries'] = array_pluck($mdl['industries'], 'id');
return $mdl;
如果您经常使用此功能,请将以下方法添加到Business
模型中:
public static function getWithIdustryIds ($business_id)
{
$mdl = Business::with('industries')->find($business_id)->toArray();
$mdl['industries'] = array_pluck($mdl['industries'], 'id');
return $mdl;
}
答案 1 :(得分:0)
你的模特关系应该是
$mdl = Business::with(['industries' => function($query){
$query->select('industry_id');
}])->get()
假设您的数据透视表有一个industry_id列,您可以使用
来急切加载industry_ids{{1}}