根据 DD.Jarod 在 Yii AR 文档页面上的评论:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#c970
"如果声明多对多关系,可连接声明中键的顺序必须是'my_id, other_id':
class Post extends CActiveRecord
{
public function relations()
{
return array(
'categories'=>array(self::MANY_MANY, 'Category',
'tbl_post_category(post_id, category_id)'),
);
}
}
class Category extends CActiveRecord
{
public function relations()
{
return array(
'Posts'=>array(self::MANY_MANY, 'Post',
'tbl_post_category(category_id, post_id)'),
);
}
}
所以你的代码看起来像:
class Owner extends CActiveRecord
{
public function relations()
{
return array(
'pets'=>array(self::MANY_MANY, 'Pet',
'tbl_post_category(pet_id, owner_id)'),
);
}
}
class Pet extends CActiveRecord
{
public function relations()
{
return array(
'owners'=>array(self::MANY_MANY, 'Post',
'tbl_post_category(owner_id, pet_id)'),
);
}
}
您的问题可能是默认情况下 Pet 和 Owner 的主键应该是 id(不是 pet_id / owner_id)。如果您不明确说明您的主键与默认命名约定不匹配/没有设置为数据库中的主键,Yii 可能会感到困惑。您可以在这样的模型中指定主键:
public function primaryKey()
{
return 'owner_id';
}
最后,你会像这样检索信息:
$owner = Owner::model()->findByPk((int)$id);
foreach($owner->pets as $pet)
{
print $pet->name;
}