Ich versuche, eine Rasteransicht mit Viele-zu-viele-Beziehungen zu erstellen. Also ich brauche eine Abfrage für die ActiveDataProvider
.Yii2-Datenprovider mit manyTomany-Beziehung
Ich habe eine Tabelle 'Ressource', eine Tabelle 'Typ' und zwischen ihnen eine Tabelle 'Historique'.
Ich habe die gute Beziehung in meinen Modellen, aber ich weiß nicht, wie Sie den DataProvider erstellen.
In meinem Modell Ressource:
public function getHistorique()
{
return $this->hasMany(Historique::className(), ['idType' => 'idType']);
}
public function getType()
{
return $this->hasMany(Type::className(), ['idType' => 'idType'])
->viaTable(Historique::className(), ['idRessource' => 'idRessource']);
}
In meinem Modell Historique:
public function getType()
{
return $this->hasOne(Type::className(), ['idType' => 'idType']);
}
public function getRessource()
{
return $this->hasOne(Ressource::className(), ['idRessource' => 'idRessource']);
}
und schließlich in meinem Modell Typ:
public function getHistorique()
{
return $this->hasMany(Historique::className(), ['idType' => 'idType']);
}
public function getRessource()
{
return $this->hasMany(Ressource::className(), ['idRessource' => 'idRessource'])
->viaTable(Historique::className(), ['idType' => 'idType']);
}
So im Controller (in der Tat meines ModelSearch), möchte ich Ressourcen mit Typ aus der Tabelle historique haben. Ich weiß nicht, was ich habe hinzuzufügen, nachdem
Ressource::find();
Dank Felder ich nicht in der Nähe war. Ich habe nur eine letzte Frage: In der GridView, wenn ich GridView :: widget (['DataProvider' => $ DataProvider]) es funktioniert. Aber wenn ich nur einige Spalten in den Rasteransichtsattributen von anderen Tabellen als Ressource auswählen möchte, sind sie unbekannt. Was muss ich in Attribute aus der Gridview schreiben? –
@ SamaëlVillette sollten Sie auch Punkt-Notation für Attribut oder Spalte Name 'relation.attribute' –
Ich werde versuchen, danke für Ihre Antwort, es hat mir wirklich geholfen :) –