2017-10-05 68 views
-2

删除特定组后,我想删除库存表中的product_id在删除Laravel中的组后删除库存表中的product_id

表结构:

product_groups
id | grp_name

products
id | prod_name | price | group_id

inventories
id | product_id | in_stock

代码:

public function ProductGroups_destroy($id) 
{ 
    $product_group = ProductGroup::find($id); 

    $product_group->delete(); 

    $product_group->product()->delete(); 

    $product_group->product->inventory()->delete(); 

    Session::flash('success', 'Product group deleted'); 
    return redirect()->back(); 
} 

模型

Product Model, ProductGroup Model

Inventory Model

+0

有什么错误? – zuif

+0

(方法库存不存在)删除特定组后,产品将被删除。但我也想删除库存表中的product_id。 – ElementsOfLife

回答

1

1)您可以在您的库存迁移时使用:

$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade'); 

来源:https://laravel.com/docs/5.5/migrations#foreign-key-constraints

2)可以覆盖删除方法:

class Product extends Model { 

    protected $table = 'products'; 

    public function inventory(){ 
     return $this->hasMany('App\Inventory', 'product_id'); 
    } 

    public function delete()  
    { 
     DB::transaction(function() 
     { 
      $this->inventory()->delete(); 
      parent::delete(); 
     }); 
    } 

} 
+0

我在迁移过程中出现以下错误“errno:150”外键约束错误地形成“(SQL:alter table'inventory'add constraint'inventories_product_id_foreign'foreign key <'product_id'> references'products'<'id'> on delete cascade)一般错误:1005不能创建表。errno:150“外键约束不正确” – ElementsOfLife

+0

尝试写入新的迁移,先删除外键,然后重新分配外键。 com/questions/26820788/add-on-delete-cascade-to-existing-column-in-laravel –

+0

语法错误或访问冲突:1091不允许drop'product_id_foreign':检查列/键是否存在..这些是我的表,产品 - > | id | prod_name | group_id |。库存 - > | id | product_id |库| – ElementsOfLife