Yii Active Record CExistValidator似乎什么也没做

时间:2012-07-01 03:47:02

标签: php yii

我正在尝试使用存在的验证规则来确保满足我的关系(即表Event中的event_id存在于表Event中)。我正在尝试使用(EventOther.php)

    public function rules(){
        return array(
                array('event_id','exists','allowEmpty'=>false,
                        'attributeName'=>'id','className'=>'Event',
                        'message'=>'Specified event does not exist. (event_id incosistent)')
    );

并且数据库中的create new条目(id为17的记录不存在):

    $ev = new EventOther;
    $ev->event_id = 17;
    $ev->location_id = 1;
    $ev->location = "Test Location - hardcoded";
    if(!$ev->save()) print_r($ev->getErrors());

总是导致CDbException:

CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`fiss`.`event_other`, CONSTRAINT `event_other_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `event` (`id`)). The SQL statement executed was: INSERT INTO `event_other` (`event_id`, `location_id`, `location`) VALUES (:yp0, :yp1, :yp2)

此外,如果未设置$ev->event_id,验证仍会通过,由于'allowEmpty'=>false它不应该。

Event::model()->exists("id=2");(其中存在ID为2的记录)返回1,而Event::model()->exists("id=17");返回空。

我是否误解/误用了CExistValidator?非常感谢所有帮助。

1 个答案:

答案 0 :(得分:2)

array('event_id','exists','allowEmpty'=>false,

应该是:

array('event_id','exist','allowEmpty'=>false,