首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过级联删除父项目时,删除Laravel 5.3多态项目

在Laravel 5.3中,当我们需要删除一个父项目时,如果该父项目与多态关联的子项目存在关联关系,我们可以通过级联删除来同时删除子项目。级联删除是指在删除父项目时,自动删除与之关联的子项目。

在Laravel中,我们可以通过在父模型中定义关联关系时使用onDelete('cascade')来实现级联删除。具体步骤如下:

  1. 在父模型中定义与子模型的关联关系。假设父模型为ParentModel,子模型为ChildModel,我们可以在ParentModel中使用morphMany方法定义多态关联关系:
代码语言:php
复制
use Illuminate\Database\Eloquent\Model;

class ParentModel extends Model
{
    public function child()
    {
        return $this->morphMany(ChildModel::class, 'parent');
    }
}
  1. 在子模型中定义与父模型的关联关系。假设子模型为ChildModel,我们可以在ChildModel中使用morphTo方法定义多态关联关系:
代码语言:php
复制
use Illuminate\Database\Eloquent\Model;

class ChildModel extends Model
{
    public function parent()
    {
        return $this->morphTo();
    }
}
  1. 在数据库迁移文件中定义父模型与子模型的表结构。假设父模型表为parent_models,子模型表为child_models,我们可以在父模型的迁移文件中使用unsignedBigInteger定义外键,并使用onDelete('cascade')实现级联删除:
代码语言:php
复制
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateParentModelsTable extends Migration
{
    public function up()
    {
        Schema::create('parent_models', function (Blueprint $table) {
            $table->id();
            // 定义其他字段
            $table->timestamps();
        });

        Schema::create('child_models', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('parent_id');
            $table->string('parent_type');
            // 定义其他字段
            $table->timestamps();

            $table->foreign('parent_id')->references('id')->on('parent_models')->onDelete('cascade');
        });
    }

    public function down()
    {
        Schema::dropIfExists('child_models');
        Schema::dropIfExists('parent_models');
    }
}
  1. 在控制器中实现删除父项目的逻辑。假设我们有一个ParentController,我们可以在删除父项目的方法中使用delete方法来实现级联删除:
代码语言:php
复制
use App\Models\ParentModel;

class ParentController extends Controller
{
    public function delete($id)
    {
        $parent = ParentModel::findOrFail($id);
        $parent->delete();

        // 删除父项目时,与之关联的子项目也会被自动删除
    }
}

通过以上步骤,当我们删除一个父项目时,与之关联的子项目也会被自动删除,实现了级联删除的功能。

对于Laravel 5.3多态项目的级联删除,腾讯云提供了丰富的云计算产品和服务,例如:

  1. 云服务器(CVM):提供可扩展的计算能力,用于部署和运行Laravel应用程序。详情请参考:腾讯云云服务器
  2. 云数据库MySQL版(CDB):提供高可用、可扩展的MySQL数据库服务,用于存储Laravel应用程序的数据。详情请参考:腾讯云云数据库MySQL版
  3. 云存储(COS):提供安全、稳定、低成本的对象存储服务,用于存储Laravel应用程序的静态文件和上传文件。详情请参考:腾讯云云存储

以上是关于通过级联删除父项目时,删除Laravel 5.3多态项目的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用Entrust扩展包在laravel 中实现RBAC的功能

想要在Laravel中使用Entrust,首先需要通过Composer来安装其依赖包: composer require zizaco/entrust 5.2.x-de 安装完成后需要在config...使用Entrust提供的迁移命令生成的关联关系表中默认使用了onDelete('cascade') 以便级记录被删除后移除其对应的关联关系。...如果模型使用了软删除,那么当不小心误删除数据,事件监听器将不会删除关联表数据。...不过,由于Laravel事件监听器的局限性,所以暂时无法区分是调用delete() 还是forceDelete() ,基于这个原因,在你删除一个模型之前,必须手动删除所有关联数据(除非你的数据表使用了级联删除...// 删除关联数据 $role- perms()- sync([]); // 删除关联数据 $role- forceDelete(); // 不管透视表是否有级联删除都会生效 总结 到此这篇关于使用

6.1K10
  • orm 系列 之 Eloquent演化历程2

    本文最后讲下Eloquent中新增的对象之间的关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 表结构 多态关联允许一个模型在单个关联下属于多个不同模型...morphMany其实是扩展是HasOneOrMany,然后再加限制的时候,新增了一个$this->query->where($this->morphType, $this->morphClass);,通过这个限制就可以解决多态关联了...让我们跟着git继续追踪吧_ 新纪元 为了解决PHP组件管理及散步的问题,2009年的php|tek大会上成立了PHP-FIG组织,目的在于透过三个方式来制定PHP社群在开发组件的规范,laravel...我们会开始看项目laravel/framework。...参考 [ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系

    2.4K30

    Laravel学习记录--Model

    '表名'//指定操作表 model 默认主键为 id 如果修改默认主键在其类名设置属性 protected $primaryKey = '主键名'//指定主键 laravel默认添加数据库,会 增加两个字段...Laravel 自带的 软删除功能 就利用全局作用域从数据库中提取「未删除」的模型。编写自定义的全局作用域可以提供一个方便、简单的方法来确保给定模型的每个查询都受到一定的约束。...下面介绍三种多态关联 一对一多态关联 一对一多态关联,还是通过举例来理解 引用大佬文章,原文链接 假设在我们的博客系统中用户可以设置头像,而文章也可以设置缩略图,我们知道每个用户只能有一个头像...Laravel Debugbar显示的sql语句我们可以很清楚的看到其执行过程 查看数据库 和我们料想得一致,课程id为1的数据被移除,并且新增了课程id为9的记录 sync支持额外数据添加 通过...当一个模型belongsTo或者belongsToMany另一个模型,如评论(comment)属于一篇文章(Post),有时更新子模型导致模型时间戳更新非常有用 如当一个Comment模型更新

    13.6K20

    通过ARP协议实验,设置错误的IP和MAC地址的静态绑定项目,会使得两台主机之间无法通信,而删除项目后可恢复通信,分析其原因。

    静态绑定是指手动设置一个IP地址与MAC地址的对应关系,以避免每次通信都要通过ARP协议来获取对应关系。...原因分析 当两台主机需要进行通信,源主机需要知道目标主机的MAC地址才能够将数据包发送到目标主机。...如果将错误的IP和MAC地址进行静态绑定,那么当源主机需要与目标主机通信,源主机会根据目标主机的IP地址查询自己的ARP缓存表,但此时查找到的MAC地址已经是错误的了,因此无法建立正确的链路层连接,进而导致通信失败...如果删除了该错误的静态绑定项目,当源主机再次需要与目标主机通信,会重新进行ARP请求以获取正确的MAC地址,ARP请求会被广播到整个局域网中,目标主机会收到ARP请求并向源主机回复一个ARP响应,包含自己的...在A主机上删除刚才添加的错误静态绑定项目,可以使用如下命令: arp -d 再次输入“arp -a”命令查看ARP缓存表,确认错误的静态绑定项目已经被删除

    24210

    Laravel-博客实战+踩坑laravel-blog最终的效果踩的坑

    最近在学习Laravel,参考的课程是后盾网地Laravel5.2博客项目实战 下面整个项目的开发过程: laravel-blog 基于laravel5.2的博客 day1(7月31): 后台模板引入...验证码 表单验证 后台权限和密码更改 文章分类 day2(8月01): 文章多级分类以及分类 ajax修改排序 文章分类添加 文章分类编辑 文章分类ajax异步删除 day3(8月02): 文章添加以及百度编辑器...Ueditor嵌入 文章缩略图上传之uploadify(HTML5版本)的引入 文章分页列表 文章编辑 文章删除 day4(8月03): 数据库迁移以及数据填充 友情链接增删改查 自定义导航 前台文章首页...session.png csrf验证 在使用Laravel框架开发网站的时候,我们最好从头到底按照框架规范进行设计 ? image.png 在进行表单验证,需要加上csrf token ?...image.png return->back()->with() return back()->with('msg','验证码错误');重定向至前一个页面,但传入的值用session('msg')无法取到 项目路由配置

    2.5K50

    Spring Data JPA 就是这么简单

    ,原来数据仍在,该配置除了 update ,还有其他配置值, create :该值慎用,每次重启项目的时候都会删除表结构,重新生成,原来数据会丢失不见。...通过一个注解:@Inheritance 该注解仅使用在类当中,该注解有三种策略分别对应上述的三种情况,该部分可以参考本人github 仓库 https://github.com/kickcodeman...CascadeType.MERGE 该级联级联更新 CascadeType.REMOVE 该级联级联删除 CascadeType.REFRESH 该级联级联刷新(不常用) CascadeType.DETACH...删除学生,把老师也删除了 学生的关键代码如下所示: //设置级联删除操作,这是多对对的级联删除, // 删除学生的同时会删除关联的老师,如果老师还有关联其他的学生,就会报错,除非老师类也要级联删除...如果老师那里也配置了级联删除删除老师的同时,老师的关联学生都会连带删除。 如果不清楚级联删除的功能,可能会造成很严重的后果,建议读者一定反复测试该案例弄清楚级联删除的使用。

    6.9K50

    Laravel 通过迁移文件定义数据表结构

    在对数据库进行操作之前,需要先创建数据表,在诸如 Laravel 这种现代框架中,通过代码驱动让数据表结构的定义变得非常简单。...每一张新表、每个新的字段、索引、以及外键都可以通过编写代码来定义,这样做的好处是在任何新环境中,你可以通过执行一个命令几秒钟就搞定项目的数据库结构。...以 Laravel 自带的 users 表迁移文件为例,代码如下所示: 正如你所看到的,这个迁移类包含了 up 方法和 down 方法,分别用于创建 users 表和删除 users 表。...('id')->on('users'); 如果你还想进一步指定外键约束(级联删除和更新,比如我们删除了 users 表中的某个 id 对应记录,那么其在文章表中对应 user_id 的所有文章会被删除...'); 注:不推荐使用外键,更不要使用外键约束功能,因为影响数据库性能,而且级联删除有可能造成非常严重的无法挽回的后果。

    2.1K21

    PHP面试题集锦

    Smarty是一个使用PHP写出来的PHP模板引擎,目的是要使用PHP程序同美工分离,使的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要...例如像股票显示,它需要经常对数据进行更新 2.小项目。小项目因为项目简单而美工与程序员兼于一人的项目 如何修改会话的生存时间?...生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交检查它。 如laravel中的 _token 4、代码注入:代码注入是利用计算机漏洞通过处理无效数据造成的。...用例子说明,以 Laravel 框架中的控制器作为说明 ①final修饰的类方法不可被子类重写; ②PHP是否重写类方法只会根据方法名是否一致判断(5.3以后重写类方法参数个数必须一致); ③重写访问级别只可以等于或者宽松于类...PHP只支持单继承,也就是说一个子类只能有一个类。 3、多态性:子类继承了来自级类中的属性和方法,并对其中部分方法进行重写。

    6.9K20

    laravel-nestedset:多级无限分类正确姿势

    laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包 目录: Nested Sets Model简介 安装要求 安装 开始使用 迁移文件 插入节点 获取节点 删除节点...嵌套集合模型 安装要求 PHP>=5.4 laravel>=4.1 v4.3版本以后支持Laravel-5.5 v4版本支持Laravel-5.2、5.3、5.4 v3版本支持Laravel-5.1 v2...node添加为指定节点$neighbor的相邻节点 $neighbor必须存在,$node可以为新创建的节点,也可以为已存在的,如果$node为已存在的节点,它将移动到新的位置与$neighbor相邻,必要它的级将改变...当你获取自定义排序的节点和不想使用递归来循环你的节点很有用。...findOrFail($id); $node->siblings()->withDepth()->get(); // OK 使用实例来获取删选的查询: $node->newScopedQuery(); 注意,当通过主键获取模型不需要使用

    3.5K20

    SqlAlchemy 2.0 中文文档(二十三)

    ## delete-orphan delete-orphan级联会为delete级联添加行为,这样当子对象与对象取消关联,子对象将被标记为删除,而不仅仅是在对象被标记为删除。...当处理一个与对象“拥有”关系的相关对象,这是一种常见的特性,该关系具有 NOT NULL 外键,因此从父集合中删除项目会导致其被删除。...然而,通常的做法是在集合内删除项目直接放弃使用 Session.delete(),而是使用级联行为自动调用删除操作,因为将对象从父集合中删除的结果。...另请参阅 2.0 中将删除的 cascade_backrefs 行为已弃用 - 关于“级联反向引用”行为变更的背景信息 删除 删除级联表示当“”对象标记为删除,其相关的“子”对象也应标记为删除。...删除孤立 delete-orphan 级联为 delete 级联增加了行为,使得当子对象与对象取消关联,子对象将被标记为删除,而不仅仅是当对象被标记为删除

    25410

    laravel之phpunit单元测试

    D:\WWW\laravel\项目\vendor\bin; 有如下显示说明配置成功: PHPUnit 5.7.27 by Sebastian Bergmann and contributors....Runtime: PHP 7.0.12 with Xdebug 2.4.1 Configuration: D:\WWW\laravel\项目名称\phpunit.xml 执行命令 phpunit...,返回值是被删除的元素 $this->assertEquals(0,count($stack) ); //判断括号内右边的值是否和左边的一致,左边的值是我们的预期输出 } 执行结果...成功输出 F 运行过程中一个断言失败输出 E 运行过程中产生一个错误时输出 R 被标记为有风险输出 S 被跳过时输出 I 被标记为不完整或未实现时输出 w 运行过程中产生一个警告 4,常用的PHPunit...小于等于 assertType 判断是否属于指定类型 assertNull 判断是否为空值 assertFileExists 判断文件是否存在 assertRegExp 根据正则表达式判断 [ Lumen 5.3

    1.8K20

    Laravel Eloquent 模型关联关系(下)

    另外,如果访问的是模型实例上的 author() 方法,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一对多的查询为例...($tagId, $attributes); 触发模型时间戳更新 当一个模型归属于另外一个模型,例如 Comment 模型归属于 Post 模型,当子模型更新模型的更新时间也同步更新往往很有用...Eloquent 提供了这种同步机制帮助我们更新子模型触发模型的更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型中配置 $touches 属性: // 要触发更新的级关联关系...,我们分了三篇的篇幅来介绍 Eloquent 模型的管理关系,回顾一下,主要包含以下内容: 七种关联关系的定义:一对一、一对多、多对多、远层一对多、一对一的多态关联、一对多的多态关联、多对多的多态关联;...以上关联关系的查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型的更新、插入和删除操作。

    19.6K30

    Laravel5.3之Session源码解析(中)

    Laravel5.3把session垃圾回收放在了启动过程中,尽管Laravel5.1是放在session关闭过程的,本篇聊下垃圾回收,这也是session第一步启动session的过程。...开发环境:Laravel5.3 + PHP7 Session垃圾回收 首先看下session中间件的源码\Illuminate\Session\Middleware\StartSession::class...当然,在对session进行CRUD操作前,首先得获取session对象即\Illuminate\Session\Store实例,有三种方法:通过Request实例;通过Session Facade方法...Session::put('session', 'Store'); // 通过helper函数来获取session实例,实际上是通过app('session')从Container中解析出名为...Laravel提供了三种方法来暂存数据: Session::flash(); Session::reflash(); Session::keep(); 总结:本文主要学习下Laravel的session

    1K41

    composer (一) -- 依赖管理

    通过项目进行拉取,往往都含有一个composer.json composer.lock 文件,这是为了保证每个开发人员都有同样的环境及依赖,更加的规范与合理。...通常用来更新依赖包的版本或增加了新的依赖使用 删除依赖 只需要修改 composer.json 文件的 require 中的包键值对,再进行 composer update即可删除依赖。...命令删除 composer remove packageName # packageName 为要删除的包名 composer.lock 文件 composer.lock 是通过 composer 进行安装或更新依赖后生成的一个文件...composer create-project -h 可以输出所有的创建项目参数及帮助信息 以 laravel 项目为例: # 最基础的参数 composer create-project laravel.../laravel blog # blog 为项目名,默认创建最新的laravel框架 # 指定版本 composer create-project --prefer-dist laravel/laravel

    1.8K30

    安装laravel5.3

    要安装运行laravel5.3 先看一下你的php版本是不是>=5.6 否则就免看了 先到composer官网手工下载最新版的composer文件 composer.phar 即可 https://...创建项目名称为blog composer create-project laravel/laravel blog 5.3.* 速度有些慢 ,静静等待。。。...目前我安装的版本是 v5.3.16 如果你下载困难 可以通过这个链接直接获取v5.3.16的下载版本 https://pan.baidu.com/s/1c2Do62G 进入blog目录或者下载版本的文件目录...你也可以用laravel项目目录自带的artisan工具启动laravel项目 php artisan serve 然后打开 http://localhost:8000 ?...再次进入项目路径 执行composer install 安装项目相关文件 composer install 如果你已经将代码部署到生产环境 请修改隐藏文件.env, 确保配置正确的数据库连接 给你看一下我的

    1K30

    Hibernate学习笔记2

    级联删除 5.8. cascade总结 提示:点击下面的“阅读原文”可以查看更多笔记 1....当我们通过session的load,get,Query的list等方法进行操作,会先判断一级缓存中是否存在,如果没有才会从数据库获取,并且将查询的数据存储到一级缓存中。...我们可以使用级联操作来解决上述的问题. 我们现在要做的是保存订单保存客户,需要在订单的hbm配置文件中修改 ? 设置cascade=save-update 那么在保存订单就可以自动将客户保存。...级联删除 我们在删除客户,也要删除订单,如果没有做级联,那么这个操作是不允许。 为了维护数据完整性 ? 想要完成操作:我们可以在客户中添加cascade=”delete”; ?...完成操作,级联保存临时对象,如果是游离对象,会执行update. delete 级联删除 delete-ophan 删除与当前对象解除关系的对象。

    1.4K40
    领券