我对cakepp相对陌生,从未写过行为。所以我需要限制一个模型的记录数量,我知道在保存之前必须使用它
型号:文档|文档类型。文档->文档类型我将最大数量的文档存储在DocumentType中。
这就是为什么我有点困惑,我到底需要什么样的模型行为或模型的回调方法(beforeSave)。但我不知道这将如何与两种模式一起工作。我开始了行为:
class LimiteBehavior extends ModelBehavior
{
public function beforeSave(Model $Model,$options=array())
{
}
我按型号称之为l:
public $actsAs=array('Limite');
这是对的,还是我应该在这里传递额外的信息?
但现在我很困惑,因为我不知道如何在行为中使用不同的模型。
我必须计算文档模型记录的数量:
$this->Document->find('count')
我必须检查DocumentType:的最大数量
$this->DocumentType->find->('first',array('fields'=>array('max_record')))
现在我必须在行为中对此进行比较。但我不知道该怎么做。请帮忙。
更新1:当max_record字段等于当前记录的数量时,我不想让用户更多地插入新记录
我建议在您的模型中创建一个自定义验证规则。此验证规则可能会根据您的条件检查项目数,但无法根据该规则进行保存。
在书中阅读有关自定义验证方法的更多信息。
,我会尝试制定这样的规则
<?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;
}
}