我在插入有父母的新记录时遇到了麻烦。
<?php
/**
* This is the model class for table "tbl_a".
* @property integer $id
....
*/
class A extends CACtiveRecord{
}
?>
<?php
/**
* This is the model class for table "tbl_b".
* @property integer $id
....
* The followings are the available model relations:
* @property A $a
*/
class B extends CACtiveRecord{
//codes...
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'a' => array(self::BELONGS_TO , 'A', 'id'),
);
}
}
?>
这是我的模型类的结构。 这里tbl_b的'id'被设置为主键,也是引用tbl_a的外键。 tbl_a的'id'是它的主键。
我的问题是,当我尝试保存B的模型对象($ b-&gt; save())后,设置除'id'之外的所有属性(但是对象的属性'a'[$ b ]设置有模型'A'的活动记录,表示具有主键10),因为没有设置'id'而在插入记录时抛出异常。但是当我在设置模型对象的'id'后尝试相同时,它正确插入。 为什么我们需要设置子模型的外键属性,即使设置了相关属性? 对此有什么解决方案吗?因此,外键引用id是从相关模型obj?
中自动获取的提前致谢。
答案 0 :(得分:0)
仅当您的数据库支持时才会自动生成。 Yii不会自己创造id。如果您使用MySQL作为RDMS,主键应标记为auto_increment。但在您的情况下,您使用外键作为主键。因此,最适合您的方法是重载beforeSave
模型的B
方法并将a::id
提取为b::id
:
public function beforeSave()
{
if (parent::beforeSave())
{
$this->id = $this->a->id;
return true;
}
return false;
}