我在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字段与当前记录的数量相等时,我不想让用户更多地插入新记录
答案 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;
}
}