在CakePHP中删除之前,请检查它是否具有相关项

如何解决在CakePHP中删除之前,请检查它是否具有相关项

| 我想检查一下,以确保在删除“ 0”之前,它没有任何“ 1”绑定。
Venue hasMany Event
Event belongsTo Venue
我相信我会在Venue模型的a3ѭ函数中执行此操作-但是-除此之外,我不确定如何检查事件...我是否必须以某种方式包括对事件模型的访问?如果失败,是否有办法返回特定的错误消息,如验证允许?还是...我是在验证本身中这样做的吗?     

解决方法

        这应该做您需要的。它将在删除场所之前检查事件计数,然后如果计数大于0,它将返回false,从而阻止删除。否则,如果没有事件关联,它将删除。
// using app/models/venue.php
// In the following example,do not let a venue delete if it still contains events.
// A call of $this->Venue->delete($id) from VenueController.php has set $this->id .
// Assuming \'Venue hasMany Event\',we can access $this->Event in the model.
function beforeDelete(){
    $count = $this->Event->find(\"count\",array(\"conditions\" => array(\"venue_id\" => $this->id)));
    if ($count == 0) {
        return true;
    } else {
        return false;
    }
}
或者您可以这样做: 在您的模型中添加此方法
function hasEvents($venue_id){
    $count = $this->Event->find(\"count\",array(\"conditions\" => array(\"venue_id\" => $venue_id)));
    if ($count == 0) {
        return false;
    } else {
        return true;
    }
}
在您的控制器中
if($this->Venue->hasEvents($venue_id)){
    //display error message that you cannot delete because venue has events
} else {
    $this->Venue->delete($venue_id);
}
    ,        我是CakePHP的新手,所以请带一点盐来回答这个问题。 我相信,由于Venue与Event有关系,因此您无需进行任何修改即可访问它,例如: $ this-> Event ... 来自场地模型或控制器。 然后,您应该可以使用查询查找该地点的任何活动。     ,        使用此行为:
<?php
/**
 * Prevent deletion if child record found
 *
 * @author    Nik Chankov
 * @url    http://nik.chankov.net
 */
class HasChildrenBehavior extends ModelBehavior {
    /**
     * Empty Setup Function
    */
    function setup(&$model) {
        $this->model = $model;
    }

    /**
     * Run the check and cancel the deletion if child is found
     * @access public
     */
    function beforeDelete(){
        if(isset($this->model->hasMany)){
            foreach($this->model->hasMany as $key=>$value){
                $childRecords = $this->model->{$key}->find(\'count\',array(\'conditions\'=>array($value[\'foreignKey\']=>$this->model->id)));
                if($childRecords > 0){
                    return false;
                }
            }
        }
        //Checking habtm relation as well,thanks to Zoltan
        if(isset($this->model->hasAndBelongsToMany)){
            foreach($this->model->hasAndBelongsToMany as $key=>$value){
                $childRecords = $this->model->{$key}->find(\'count\',array(\'conditions\'=>array($value[\'foreignKey\']=>$this->model->id)));
                if($childRecords > 0){
                    return false;
                }
            }
        }
        return true;
    }
}
?>
消息来源:http://nik.chankov.net/2007/10/23/check-for-existing-childs-behaviour/ HTH。     ,        使用cakephp 3.5.1试试这个.. 在产品模型中 产品属于类别 在类别控制器中
public function delete($id = null)
{
    $this->request->allowMethod([\'post\',\'delete\']);
    if($this->checkassociated($id) > 0){
        $this->Flash->error(__(\'this category could not be deleted.\'));
    }else{
        $category = $this->Categories->get($id);
        if ($this->Categories->delete($category)) {
            $this->Flash->success(__(\'this category has been deleted.\'));
        } else {
            $this->Flash->error(__(\'this category could not be deleted.\'));
        }
    }
    return $this->redirect([\'action\' => \'index\']);
}

public function checkassociated($category_id){
    $itemsTable = TableRegistry::get(\'Products\');
    $itemdata = $itemsTable->find(\'all\')
        ->where([\'Products.category_id\'=>$category_id]);
    $number = $itemdata->count();
    return $number;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?