我正在尝试使用存在验证规则来确保满足我的关系(即表 EventOther 中的 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)')
);
以及在数据库中创建新条目(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?非常感谢所有帮助。