0

我在插入具有 parent 的新记录时遇到问题。

<?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->save())时,在设置了除“id”之外的所有属性之后(但对象 [$b] 的属性“a”设置为模型'A'的活动记录说具有主键10),插入记录时抛出异常,因为没有设置'id'。但是当我在设置模型对象的 'id' 后尝试相同时,它正确插入。为什么即使设置了相关属性,我们也需要设置子模型的外键属性?有什么解决方案。以便从相关模型 obj 中自动获取外键引用 id?

提前致谢。

4

1 回答 1

0

只有当您的数据库支持时才会自动生成。Yii 不会自己创建 id。如果您使用 MySQL 作为 RDMS,则应将主键标记为 auto_increment。但是在您的情况下,您使用外键作为主键。因此,对您来说最可取的方法是重载模型beforeSave的方法B并获取a::idb::id

public function beforeSave()
{
    if (parent::beforeSave())
    {
        $this->id = $this->a->id;
        return true;
    }
    return false;
}
于 2013-05-24T04:11:53.393 回答