我正在尝试从多对多关系中检索数据。我有两个表:
companies: [cid,name,origin]
vehicle_types: [id, type]
他们的数据透视表:companies_vehicle_types: companies_id,vehicle_types_id
关系定义:
在公司:
public function vehicle_types(){
return $this->belongsToMany('App\vehicle_types');
}
在vehicle_types中
public function companies(){
return $this->belongsToMany('App\companies')->withTimestamps();
}
我想检索vehicle_types =特定类型的公司。我怎样才能做到这一点? 我尝试在我的控制器中执行以下操作:
$vehicle_types=vehicle_types::all()->whereLoose('type','Bike');
foreach ($vehicle_types->companies as $vehicle_types) {
$company[]=$vehicle_types->pivot->name;
}
return $company;
但它似乎没有起作用。它会引发Undefined property: Illuminate\Database\Eloquent\Collection::$companies
答案 0 :(得分:1)
如果你没有遵循laravel的约定,则覆盖关系中的第二个,第三个和第四个参数。请参阅文档Many to Many Relation
第二个参数确定关系的表名 加入表。第三个参数是。的外键名称 你定义关系的模型,而第四个 argument是要加入的模型的外键名称:
public function vehicle_types(){
return $this->belongsToMany('App\vehicle_types', 'companies_vehicle_types', 'companies_id', 'vehicle_types_id');
}
另外,One $ vehicle_type可以有很多公司,所以:
$vehicle_types=vehicle_types::all()->whereLoose('type','Bike');
foreach ($vehicle_types as $vehicle_type) {
foreach($vehicle_type->companies as $company)
{
$company[]=$company->pivot->name;
}
endforeach
}
同样,我在数据透视表中看不到name
字段,因为此行有效:$company[]=$company->pivot->name;