【问题标题】:Laravel 5 - Get property from Pivot Table extra attributeLaravel 5 - 从数据透视表额外属性获取属性
【发布时间】: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


    【解决方案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
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多