与数据透视表的一对多关系

时间:2016-08-27 10:05:40

标签: laravel laravel-5 laravel-5.2

我有2个表制造商和供应商,他们有多对多的关系

Schema::create('manufacturers', function (Blueprint $table) {
       $table->increments('id');
       $table->string('name')->unique();
       $table->timestamps();
}); 

  Schema::create('suppliers', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('location');
        $table->timestamps();
 ​ });

所以我创建了一个名为" manufacturer_supplier"它工作正常。

Schema::create('manufacturer_supplier', function (Blueprint $table) {

$table->increments('id');
$table->integer('manufacturer_id')->unsigned()->index();
$table->integer('supplier_id')->unsigned()->index();
$table->timestamps();

$table->foreign('manufacturer_id')->references('id')->on('manufacturers')->onDelete('cascade');
$table->foreign('supplier_id')->references('id')->on('suppliers')->onDelete('cascade');
 });

我的困惑来自于添加新表"设备"

Schema::create('devices', function (Blueprint $table) {

$table->increments('id');
$table->string('serial')->unique();
$table->string('name');
​$table->integer('supplier_id')->unsigned()->nullable();
$table->integer('manufacturer_id')->unsigned()->nullable();
$table->text('notes')->nullable();
$table->timestamps();

$table->foreign('supplier_id')->references('id')->on('suppliers')->onDelete('cascade');
$table->foreign('manufacturer_id')->references('id')->on('manufacturers')->onDelete('cascade');
 });

我希望与供应商和制造商之间建立一对多的关系,因此我将有一个制造商的精选列表,然后填充来自Pivot表中与所选制造商相关的供应商的下一个列表。

目前我的"设备"模型具有以下关系,它将它们与原始表格相关联,而不是枢轴,因此它不起作用

//5
public function manufacturer(){

return $this->belongsTo('App\Manufacturer');
}
//6

public function supplier(){

return $this->belongsTo('App\Supplier');
}

我还没有这样做过,所以我很想知道什么是最好的解决方案。 非常感谢,

1 个答案:

答案 0 :(得分:1)

如果您希望所有供应商与单一制造商相关联,您可以使用多对多关系获取它们。

$suppliersList = $supplier->manufacturer()->suppliers();

howerver我不明白为什么设备应该与单个供应商相关联......但这取决于你。