我第一天在看YII,我在尝试解决一些表之间的关系时遇到了一些问题。
我的表结构如下:
宠物:pet_idpet_name....
Pet_Owner_Linkpet_idowner_id
所有者:owner_idowner_name
我将如何获得所有属于主人的宠物?目前真的很难理解AR关系。
根据 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)'),
);
}
}
您的问题可能是默认情况下,宠物和主人的主键应该是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;
}
我知道
这不是你所要求的,但这就是我的做法。
在所有者模型中的关系()返回中添加此项:
'all_pets'=>array(self::HAS_MANY, 'Pet_Owner_Link','owner_id'),
在模型Pet_Owner_Link relations() 返回中添加此项:
'pet'=>array(self::BELONGS_TO, 'Pet', 'pet_id'),
那就养一只这样的宠物
吧$owner->all_pets[$i]->pet;