这有可能吗?在我阅读的每个教程中,都没有关于删除的内容,仅选择和插入相关模型。
这是我的问题:
我有三个层次的嵌套。我有课程包,水平,课程和阶段,其模型如下。第一个-套件:
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');
}
}
经验教训:
课堂延伸口才{
protected $table = 'lessons';
public function phases(){
return $this->hasMany('Phase', 'lesson_id');
}
public function level(){
return $this->belongsTo('Level', 'level_id');
}
}
我要在这里做的是删除一个程序包时删除与其相关的所有级别,并删除与这些级别相关的所有课程。
我尝试了几个选项,但它们全都错了,我只是不知道如何在不进行foreach循环查询的情况下做到这一点。请给我一些建议,我非常绝望,我正在考虑给Jeffrey Way发推文,并请他提供解决方案:)预先感谢
您可以通过两种方式解决此问题:
利用数据库为您执行删除操作。您将分别在lessons
,levels
和的迁移中添加这样的内容packages
:
$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');
您可以覆盖delete
每个模型上的方法以删除其所有关系:
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();
});
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句