Laravel 5 - 从数据透视表额外属性获取属性
Posted
技术标签:
【中文标题】Laravel 5 - 从数据透视表额外属性获取属性【英文标题】:Laravel 5 - Get property from Pivot Table extra attribute 【发布时间】: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
【问题讨论】:
【参考方案1】:我刚收到:
public function materiales()
return $this->belongsToMany('App\Material', 'material_part')
->withPivot('part_id', 'provider_id')
->join('providers', 'material_part.provider_id', '=', 'providers.id')
->select('providers.name as pivot_providers_name', 'materials.*');
//SELECT * FROM `material_part` INNER JOIN providers ON material_part.provider_id = providers.id
谢谢!
【讨论】:
【参考方案2】:为了从pivot
表中获取值,您使用pivot->propertyName
@foreach($parts as $key => $value)
@foreach($value->materials as $mvalue)
$mvalue->pivot-> provider_id
@endforeach
@endforeach
希望对你有帮助
【讨论】:
以上是关于Laravel 5 - 从数据透视表额外属性获取属性的主要内容,如果未能解决你的问题,请参考以下文章
从 Laravel 中的数组向数据透视表中的额外列添加条件值