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



我对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;
}
}

最新更新