这甚至可能吗?
在我阅读的每个教程中,没有关于删除,只选择和插入相关模型的内容.
在我阅读的每个教程中,没有关于删除,只选择和插入相关模型的内容.
这是我的问题:
我有三个级别的嵌套.我有课程包,课程,课程和阶段,他们的模型如下.第一个 – 包:
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循环中进行一堆查询而不做这个.
请给我一些建议我很绝望我正在考虑给Jeffrey Way发推文并问他解决方案:)提前谢谢
解决方法
您可以通过两种方式解决此问题:
>利用数据库为您进行删除.您将分别为课程,级别和包的迁移添加类似的内容:
$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(); }); } }