从多对多的关系中寻找。 Laravel

时间:2017-01-22 08:43:06

标签: php mysql laravel laravel-5.2 information-retrieval

我正在尝试从多对多关系中检索数据。我有两个表:

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

的错误

1 个答案:

答案 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;