多対多の関係を持つグリッドビューを構築しようとしています。だから私はActiveDataProvider
のクエリが必要です。manytomany関係を持つYii2データプロバイダ
私はテーブルのressource '、テーブル「タイプ」と、それらの間にテーブル「ヒストリーク」を持っています。
私のモデルには良い関係がありますが、dataProviderの作成方法はわかりません。私のモデル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']);
}
に歴史:私のモデルタイプで
public function getType()
{
return $this->hasOne(Type::className(), ['idType' => 'idType']);
}
public function getRessource()
{
return $this->hasOne(Ressource::className(), ['idRessource' => 'idRessource']);
}
、最終的には:だから
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']);
}
コントローラで(実際には私のModelSearch)、私はテーブルのhistoriqueからタイプのressourcesを持っています。私はあなたがRessourceSearch()->search()
メソッドを使用すると思います
Ressource::find();
感謝をフィールドに対してあなたは追加の検証ルールを使用することができます
:上記の例の場合、あなたはそのようなあなたの
rules()
配列何かに追加する必要があります。私はちょうど最後の質問があります:GridViewで私はGridView :: widget(['dataProvider' => $ dataProvider])を使うと動作します。しかし、グリッドビューの一部の列を選択したいときは、ressource以外の表の属性は不明です。グリッドビューの属性に何を書き込む必要がありますか? Samaë[email protected] –あなたも、私はあなたの答えのために、この感謝をしようとする属性または列名 'relation.attribute' –
するために、ドット表記を使用する必要があり、それは本当に私を助け:) –