初日はYIIを見ていますが、いくつかのテーブル間の関係を理解しようとして問題が発生しています。
私のテーブル構造は次のとおりです。
ペット:pet_idpet_name...。
Pet_Owner_Link pet_id owner_id
所有者:owner_id owner_name
飼い主のペットをすべて飼うにはどうすればよいですか?現時点では、AR関係に頭を悩ませるのに本当に苦労しています。
初日はYIIを見ていますが、いくつかのテーブル間の関係を理解しようとして問題が発生しています。
私のテーブル構造は次のとおりです。
ペット:pet_idpet_name...。
Pet_Owner_Link pet_id owner_id
所有者:owner_id owner_name
飼い主のペットをすべて飼うにはどうすればよいですか?現時点では、AR関係に頭を悩ませるのに本当に苦労しています。
Yii ARドキュメントページのDD.Jarodによるこのコメントによると: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;
}
私はこれがあなたが尋ねるものと正確に一致しないことを知っています、しかしこれは私がそれをする方法です。
所有者モデルのrelations()returnにこのアイテムを追加します:
'all_pets'=>array(self::HAS_MANY, 'Pet_Owner_Link','owner_id'),
Pet_Owner_Linkモデルのrelations()returnにこのアイテムを追加します。
'pet'=>array(self::BELONGS_TO, 'Pet', 'pet_id'),
次に、このようなペットを取得します
$owner->all_pets[$i]->pet;