php – 在Laravel中删除一对多的相关模型
发布时间:2020-12-14 19:42:05 所属栏目:大数据 来源:网络整理
导读:这甚至可能吗? 在我阅读的每个教程中,没有关于删除,只选择和插入相关模型的内容. 这是我的问题: 我有三个级别的嵌套.我有课程包,课程,课程和阶段,他们的模型如下.第一个 – 包: class Package extends Eloquent {protected $table = 'packages';public $t
这甚至可能吗?
在我阅读的每个教程中,没有关于删除,只选择和插入相关模型的内容. 这是我的问题: 我有三个级别的嵌套.我有课程包,课程,课程和阶段,他们的模型如下.第一个 – 包: class Package extends Eloquent { protected $table = 'packages'; public $timestamps = false; public function levels(){ return $this->hasMany('Level','package_id'); } } 级别: class Level extends Eloquent { protected $table = 'levels'; public function lessons(){ return $this->hasMany('Lesson','level_id'); } public function package(){ return $this->belongsTo('Package','package_id'); } } 教训: 课程扩展Eloquent { protected $table = 'lessons'; public function phases(){ return $this->hasMany('Phase','lesson_id'); } public function level(){ return $this->belongsTo('Level','level_id'); } } 我在这里要做的是删除一个包时删除与其相关的所有级别,并删除与这些级别相关的所有课程. 我已经尝试了几个选项并且它们都错了,我只是不知道如何在foreach循环中进行一堆查询而不做这个. 解决方法
您可以通过两种方式解决此问题:
>利用数据库为您进行删除.您将分别为课程,级别和包的迁移添加类似的内容: $table->foreign('level_id')->references('id')->on('levels')->onDelete('cascade'); $table->foreign('lesson_id')->references('id')->on('lessons')->onDelete('cascade'); $table->foreign('package_id')->references('id')->on('packages')->onDelete('cascade'); >您可以覆盖每个模型上的删除方法以删除其所有关系: class Lesson extends Eloquent { protected $table = 'lessons'; public function phases(){ return $this->hasMany('Phase','lesson_id'); } public function level(){ return $this->belongsTo('Level','level_id'); } public function delete() { DB::transaction(function() { $this->level()->delete(); $this->phases()->delete(); parent::delete(); }); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |