CakePHP中的级联删除及批量删除

来源:互联网 发布:监控设备搜索软件 编辑:程序博客网 时间:2024/05/18 00:52

假设有 articlescomments 两张数据表,两者之间为一对多的关系,即 Article hasMany Comments

级联删除

如果要在删除某篇文章的时候,同时级联删除该文章所有的评论,则需要在 ArticlesTable 类中进行类似如下配置:

    public function initialize(array $config)    {        ...        $this->hasMany('Comments', [            'foreignKey' => 'article_id',            'dependent' => true, //设置级联            'cascadeCallbacks' => true        ]);        ...    }

批量删除

使用 Cake\ORM\Table::deleteAll($conditions) 批量删除符合某些条件的文章,如在ArticlesController的方法中:

...$this->Articles->deleteAll([    'title LIKE' => '%测试%']);...

批量级联删除

在使用 Cake\ORM\Table::deleteAll() 方法进行批量删除的时候,在Table类中设置的 dependent => true 便不再起作用,也就是说在批量删除的时候不能自动级联删除相关数据。目前可行的替代方法是首先查询出一个Collection对象,然后在遍历中逐条删除,如在Contorller方法中:

...$articles = $this->Articles->find('all', [    'conditions' => [        'title LIKE' => '%测试%'    ]]);foreach($articles as $article) {    $this->Articles->delete($article);}...
原创粉丝点击