cakephp 2.x限制添加新记录时的记录数(行为或模型回调方法)

时间:2015-04-30 08:42:58

标签: cakephp cakephp-2.0

我在cakephp中相对较新,我从来没有写过行为。 所以我需要限制模型的记录数量,我知道必须使用beforeSave

模特:文件| DocumentType。文档 - > DocumentType 我在DocumentType中存储了最大数量的文档。

这就是为什么我有点困惑我需要的模型行为或回调方法(beforeSave)。 但是我不知道这对两个模型有什么用。我开始了这个行为:

     class LimiteBehavior extends ModelBehavior
       {
       public function beforeSave(Model $Model,$options=array())
                    {

}

我通过modell调用它:

public $actsAs=array('Limite');

这是对还是我应该通过这里额外的信息?

但现在我很困惑,因为我现在不知道如何在行为中使用不同的模型。

我必须计算文档模型记录的数量:

$this->Document->find('count')

我必须检查DocumentType的最大数量:

$this->DocumentType->find->('first',array('fields'=>array('max_record')))

现在我必须在行为中对此进行比较。但我不知道该怎么做。 请帮忙。

UPDATE1: 当max_record字段与当前记录的数量相等时,我不想让用户更多地插入新记录

1 个答案:

答案 0 :(得分:0)

我建议您在模型中创建自定义验证规则。此验证规则可以根据您的条件检查项目数,并且无法根据该规则进行保存。

Read more about custom validation methods in the book

我会尝试制定类似这样的规则,

<?php
class Document extends AppModel {

    public $validate = array(
        'document_type_id' => array(
            'rule' => 'limitDuplicates',
            'message' => __('Maximum number of documents of this type already created')
        )
    );

    public function limitDuplicates($check) {
        $max = $this->DocumentType->field('max_record', ['DocumentType.id' => $check['document_type_id']]);
        $count = $this->DocumentType->find('count', [
            'conditions' => [
                'DocumentType.id' => $check['document_type_id']
            ]
        ]);

        return $count < $max;
    }
}