【发布时间】:2018-08-18 00:42:11
【问题描述】:
零件和材料模型之间存在多对多关系。它与数据透视表完美配合。
现在我刚刚在数据透视表中添加了另一列,名为“provider_id”。我需要的是当用户将材料添加到零件时,他还为该材料选择了哪个提供者(因为材料提供者也是多对多关系),所以当我这样做时:
@foreach($parts as $key => $value)
@foreach($value->materials as $mkey => $mvalue)
{{ $mvalue->provider_id }}
@endforeach
@endforeach
我得到了提供商 ID,没关系。但我想得到它的名字。类似 $mvalue->provider->name 的东西。我该怎么做?
这是我的数据透视表迁移:
Schema::create('material_part', function (Blueprint $table) {
$table->integer('part_id')->unsigned();
$table->foreign('part_id')->references('id')
->on('parts')->onDelete('cascade');
$table->integer('material_id')->unsigned();
$table->foreign('material_id')->references('id')
->on('materials')->onDelete('cascade');
$table->integer('provider_id')->unsigned();
$table->foreign('provider_id')->references('id')
->on('providers')->onDelete('cascade');
$table->timestamps();
});
零件模型:
class Part extends Model
{
public function materiales(){
return $this->belongsToMany('App\Material', 'material_part')->withPivot('part_id', 'provider_id');
}
}
我在Material模型中也有同样的关系。
提供者模型:
public function materials(){
return $this->belongsToMany('App\Material', 'material_provider');
}
每个关系都运行良好,但访问每个部分的每个材料的单个提供者。
谢谢!
编辑:
我正在尝试这个(还没有成功)
public function materials(){
return $this->belongsToMany('App\Material', 'material_part')
->withPivot('part_id', 'provider_id')
->join('providers', 'material_part.provider_id', '=', 'providers.id');
//SELECT * FROM `material_parte` INNER JOIN providers ON material_part.provider_id = providers.id
}
【问题讨论】:
标签: php laravel many-to-many relationships