Я пытаюсь построить сетку с отношениями «многие ко многим». Поэтому мне нужен запрос для ActiveDataProvider
.Yii2 dataprovider with manytomany relation
У меня есть таблица 'ressource', таблица 'type' и между ними таблица 'historyique'.
У меня хорошее отношение к моим моделям, но я не знаю, как создать 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']);
}
В моей модели Historique:
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), я хочу иметь ressources с типом из истории таблицы. Я не знаю, что я должен добавить после
Ressource::find();
Спасибо, я не был близок. У меня есть только последний вопрос: в gridView, когда я использую GridView :: widget (['dataProvider' => $ dataProvider]), он работает. Но когда я хочу выбрать только несколько столбцов в атрибутах вида сетки из таблицы других, чем ressource, неизвестно. Что мне нужно написать в атрибуте из gridview? –
@ SamaëlVillette вы также должны использовать dot-notation для атрибута или имени столбца 'relation.attribute' –
Я попробую это за ваш ответ, это действительно помогло мне :) –