php – 在Laravel中删除一对多的相关模型

这甚至可能吗?
在我阅读的每个教程中,没有关于删除,只选择和插入相关模型的内容.

这是我的问题:

我有三个级别的嵌套.我有课程包,课程,课程和阶段,他们的模型如下.第一个 – 包:

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();
        });
    }

}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...