Laravel反向插入数据透视表查询

时间:2017-05-16 11:12:56

标签: php mysql laravel eloquent laravel-eloquent

我正在创建一个应用,但是当我插入一些相关数据时,生成的查询会被反转,我现在不知道原因。

$last_fab->medidas()->attach(
    $last_medida->id_medida, ["medida" => $newPedidos[$i]["medidas_fab"][$j]["meters"]]
);

$ last_fab是Fabricacion的一个分支,而Fabricacion与Medidas有这种关系:

public function medidas() {
    return $this->belongsToMany("App\Models\Medida", "fabricacion_medidas", "id_medida", "id_fabricacion")->withPivot("medida");
}

$ last_medida是Medida的一个实例,Medida与Fabricacion有这种关系:

public function fabricaciones() {
    return $this->belongsToMany("App\Models\Fabricacion", "fabricacion_medidas", "id_fabricacion", "id_medida")->withPivot("medida");
}

有迁移代码:

//fabricacion
Schema::create("fabricacion", function (Blueprint $table) {
    $table->engine = "InnoDB";

    $table->increments("id_fabricacion");
    $table->integer("id_order");
    $table->integer("id_megacart")->nullable();
    $table->string("reference");
    $table->string("name");
    $table->float("width");
    $table->float("height");
    $table->float("length");
    $table->date("date_update");
    $table->integer("id_categoria")->unsigned()->nullable();
    $table->integer("id_ubicacion")->unsigned()->nullable();
    $table->integer("id_incidencia")->unsigned()->nullable();
    $table->integer("estado")->default(1);
    $table->timestamps();
});

//medidas
Schema::create("medidas", function (Blueprint $table) {
    $table->engine = "InnoDB";

    $table->increments("id_medida");
    $table->string("nom_medida")->nullable();
});

//fabricacion_medidas
Schema::create("fabricacion_medidas", function (Blueprint $table) {
    $table->engine = "InnoDB";

    $table->integer("id_fabricacion")->unsigned();
    $table->integer("id_medida")->unsigned();
    $table->integer("medida");
});

Schema::table("fabricacion_medidas", function(Blueprint $table) {
    $table->foreign('id_fabricacion')->references('id_fabricacion')->on('fabricacion');
    $table->foreign('id_medida')->references('id_medida')->on('medidas');
});

这里显示给我的错误:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:
 a foreign key constraint fails (`asensiapp`.`fabricacion_medidas`, CONSTRAINT 
`fabricacion_medidas_id_medida_foreign` FOREIGN KEY (`id_medida`) 
REFERENCES `medidas` (`id_medida`)) (SQL: insert into `fabricacion_medidas`
 (`id_fabricacion`, `id_medida`, `medida`) values (1, 10, 1.343))

有时候会出现同样的错误,但它会引用id_fabricaccion而不是id_medida。 在值中,10是id_fabricacion,1是id_medida。所以我不知道为什么不在正确的位置。

1 个答案:

答案 0 :(得分:1)

您已经改变了模型中的关系:

return $this->belongsToMany('[ExternalClass]', '[table]', '[CurrentClassId]', '[ExternalClassId]');

Documentation

所以你的Fabricacion变成了

public function medidas() {
    return $this->belongsToMany("App\Models\Medida", "fabricacion_medidas", "id_fabricacion", "id_medida")->withPivot("medida");
}

您的Medidas变为

public function fabricaciones() {
    return $this->belongsToMany("App\Models\Fabricacion", "fabricacion_medidas", "id_medida", "id_fabricacion")->withPivot("medida");
}