CakePHP:多列唯一日期+ id验证

时间:2014-03-25 18:42:03

标签: cakephp cakephp-2.0

表格结构

 id, chart_id, date, rate
 Datapoint belongsTo Chart

我试图在chart_id,date上制作一个唯一的索引验证规则。我尝试使用插件MultiColumnUniqueness进行验证,但它总是返回true。

编辑:这不是问题所在。这对于检查多列唯一性是有效的。见下文。 使用MultiColumnUniqueness进行模型验证:

 public $actsAs = array('MultiColumnUniqueness.MultiColumnUniqueness' => array(
        'fields' => array('chart_id', 'date'),
        'errMsg' => "This date for this chart has already been used."
));

有没有办法在CakePHP中验证带有日期的多列唯一索引?

编辑:我的数据数组是以下结构:

 array(
'Datapoint' => array(
    (int) 0 => array(
        'id' => '1055',
        'date' => array(
            'month' => '12',
            'year' => '2012',
            'day' => '01'
        ),
        'active' => '1',
        'num' => '15',
        'days' => '897',
        'chart_id' => '4'
    ),
    (int) 1 => array(
        'id' => '1054',
        'date' => array(
            'month' => '12',
            'year' => '2012',
            'day' => '01'
        ),
        'active' => '1',
        'num' => '4',
        'days' => '768',
        'chart_id' => '4'
    )
 );

解决:WalkingRed的解决方案与我正在使用的插件一样有效,但问题并非如此。在尝试使用$ this-> Chart-> validates()保存saveAssociated之前,我试图验证。事实证明,如果您只是验证,则需要通过不同的方法验证多行:

  if ($this->Chart->saveAssociated($this->request->data, array('validate' => 'only'))) {
        // validates
     } else{
        $errors = $this->Chart->invalidFields(); //validation error
     }

1 个答案:

答案 0 :(得分:0)

你在模特中添加了类似的东西吗?

public $validate = array(
    'chart_id' => array(
        'unique_first_last' => array(
            'rule'    => array('checkMultiColumnUnique', array('chart_id', 'date'), false)
            'message' => 'Chart and date must be unique.'
        )
    ),
;)


public function checkMultiColumnUnique($ignoredData, $fields, $or = true) {
        return $this->isUnique($fields, $or);
}