2017-10-28 115 views
0

這裏Yii2的hasMany關係的情景:與同桌

我有兩個表:

family: id, name 
person: id, name, familyId 

國外關鍵是人(FAMILYID - > family.id)

在我人物模型我想要有一個關係,可以包含與當前人物具有相同familyId的所有人物作品。

本質上我想要做$person = Person::find([...])->with('family')->all()來獲取當前的Person模型,包括一系列的家庭成員。

到目前爲止,我有這樣的PersonModel:

public function getFamilyMembers() 
{ 
    return $this->hasMany(Person::className(), ['familyId' => 'familyId']); 
} 

...

$person = Person::find() 
      ->with('familyMembers') 
      ->where(['id'=>1]); 
foreach($person->family as $m) { 
    var_dump($m); 
} 

我知道我可以用接線表做到這一點。但由於它是1:n的關係,我想避免多餘的表。

謝謝。

回答

0

的快速決策是這樣的查詢在您的個人模式:

public function getRelatedPersons() 
{ 
    return self::find()->jeftJoin(Family::tableName(), 'person.familyId = 
    family.id')->where(['person.familyId' => $this->familyId])->all(); 
} 
... 
foreach($personModel->relatedPersons as $person) { 
    var_dunp($preson); 
}