Hier ist das Szenario:Yii2 hasMany Beziehung mit derselben Tabelle
Ich habe zwei Tabellen:
family: id, name
person: id, name, familyId
Der Fremdschlüssel auf Person ist (FamilyID -> family.id)
In meinem Personenmodell Ich möchte eine Beziehung haben, die alle Personeneinträge enthalten kann, die dieselbe familyId wie die aktuelle Person haben.
Im Wesentlichen möchte ich $person = Person::find([...])->with('family')->all()
machen, um das aktuelle Personenmodell zu erhalten, einschließlich eines Arrays von Familienmitgliedern.
Bisher habe ich diese auf 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);
}
Ich weiß, dass ich diese Tabelle mit einer Kreuzung tun könnte. Aber da es eine 1: n-Beziehung ist, möchte ich die zusätzliche Tabelle vermeiden.
Danke.