【问题标题】:Delete product_id from inventories table after deleting a group in Laravel在 Laravel 中删除组后从库存表中删除 product_id
【发布时间】:2018-03-17 12:12:49
【问题描述】:

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

表结构:

product_groups
编号 | grp_name

产品
编号 |产品名称 |价格 | group_id

库存
编号 |产品编号 |进货

代码:

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

【问题讨论】:

  • 错误是什么?
  • (方法库存不存在)删除特定组后,产品被删除。但我也想删除库存表中的 product_id。

标签: php laravel laravel-5 laravel-4


【解决方案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();
        });
    }

}

【讨论】:

  • 我的迁移出现以下错误“errno: 150”外键约束格式不正确”(SQL:alter table 'inventories' add constraint 'inventories_product_id_foreign' foreign key references' products' on delete cascade)一般错误:1005 无法创建表。errno:150“外键约束格式不正确”
  • 尝试编写新的迁移,首先删除外键,然后重新分配外键。请查看此链接:stackoverflow.com/questions/26820788/…
  • 语法错误或访问冲突:1091 Cant drop 'product_id_foreign': check that column/key exists.. 这些是我的表,产品 -> |id|prod_name|group_id|。库存 -> |id|product_id|instock|
  • 我得到了它的工作..但删除组后..我收到了这个错误(方法库存不存在。)。控制器代码: public function ProductGroups_destroy($id) { $product_group = ProductGroup::find($id); $product_group->删除(); $product_group->product()->delete(); $product_group->product->inventory()->delete(); Session::flash('成功', '产品组已删除');返回重定向()->返回(); }
  • 它工作了.. 使用 $product_group->product()->delete();谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多