【问题标题】:how to delete all associated relational model record of a model from laravel?如何从 laravel 中删除模型的所有关联关系模型记录?
【发布时间】:2018-07-06 15:47:36
【问题描述】:

我正在使用 laravel 5.6。我想删除所有子模型,只要父模型。这意味着如果我删除父模型,那么所有子模型记录都应该删除自己。

检查这个查询。

$d= ParentModel::where('id',2)->with('child_1' ,'child_2','child_3')->first();  

这里我不想定义循环和其他任何东西来删除父表和子表的所有记录。只想删除父表,它的所有子表也应该删除自己。

我不知道。这是否可以直接删除所有关联模型而不提及。 像这样。

$d-> child_1->delete();
$d-> child_2->delete();
$d-> child_3->delete();
$d-> delete();

【问题讨论】:

  • 为什么不设置外键?
  • 是的,我们可以。但它有点复杂。你能发给我在 laravel 中设置外键的链接吗?
  • 你在使用 laravel 迁移吗?
  • 是的,但没有提到外键

标签: eloquent laravel-5.6 php-7.2


【解决方案1】:

是的,你可以。这是删除代码

$parentModel = ParentModel::find($id);  
$parentModel->child_1()->delete(); // return deleted record count
$parentModel->child_2()->delete(); // return deleted record count
$parentModel->child_3()->delete(); // return deleted record count

【讨论】:

    【解决方案2】:

    您可以为孩子的表迁移添加外键:

    $table->unsignedInteger('parent_id');
    
    $table->foreign('parent_id')
        ->references('id')->on('parent_table_name')
        ->onUpdate('cascade')
        ->onDelete('cascade');
    

    现在,当您删除父行时,子行将被自动删除。

    有关外键的更多信息:https://laravel.com/docs/5.6/migrations#foreign-key-constraints

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多