2013-06-29 53 views
0

我有两个表在MySQL中设置了一对多的关系。我用Gii来生成模型& CRUD。Yii外键

Yii默认是否创建规则&如果我尝试输入实际上不是其他表的外键的外键值,那么默认的错误消息是?

我在'The Yii Book'中遇到了这段话,可能会回答我的问题。

“也需要由‘存在’校验 这证实了在此表的外键值存在在另一个 主键{TIP}的关系”。

所以我需要写一个“存在”验证?

+0

CExistValidator验证属性值是否存在于表中。 – Ninad

+0

Ahh,k。所以像这样? http://www.yiiframework.com/forum/index.php/topic/8085-problem-with-cexistvalidator/ 我认为的Yii会处理这些类型的错误,因为我用建立在数据库B4的关系Gii生成模型和CRUD。在过去,我一直使用外键作为值的下拉菜单,并没有注意到看到错误信息的可能性。 – user2421464

回答

0

默认情况下,不会创建与外键相关的验证规则。

如果数据库给出了一个外键冲突错误虽然Yii中会产生错误信息(CDbException)。

+0

当你说默认情况下没有创建验证规则。你的意思是在模型中的函数规则()中?因为那会选择规则,就像我在MYSQL中指定需要一个字段一样。它有。 array('user_id,nick_name','required'), 例如。 但如果我尝试创建一个记录和外键犯规匹配在DB现有的,它抛出一个丑陋的错误信息 CDbException CDbCommand未能执行SQL语句:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败 – user2421464

+0

是的,这就是我的意思。如果该字段被创建为NOT NULL,您将得到一个“必需”规则,但永远不会有与fk相关的规则。这意味着验证会通过,并且由于违反约束条件,您会得到一个cdbexception。 – Joni

+0

Ahh,k。谢谢。这回答了我的问题。公吨! – user2421464

0

Yii的外币它的默认规则,你会发现在模型例如

public function rules() 
    { 
     // NOTE: you should only define rules for those attributes that 
     // will receive user inputs. 
     return array(
      array('primaryEmail, password, creationTime, IPAddress, isBusiness, forgotPassTime, aboutMe, fname, lname', 'required'), 

     ); 
    } 

你也可以用于验证

提供自定义的消息,并且还提供了默认的关系,例如

public function relations() 
    { 
return array(
      'articles' => array(self::HAS_MANY, 'Article', 'authorId'), 
}