PHP, Yii2 GridView filtrage sur la valeur relationnelle

À la suite de cette:

Yii2 comment search() dans SearchModel travail?

Je voudrais être en mesure de filtrer un GridView colonne de données relationnelles. C'est ce que je veux dire:

J'ai deux tables, TableA et TableB. Les deux ont des modèles générés à l'aide de Gii. TableA a une clé étrangère vers une valeur dans TableB, comme ceci:

TableA
attrA1, attrA2, attrA3, TableB.attrB1

TableB
attrB1, attrB2, attrB3

attrA1 et attrB1 sont les clés primaires de leurs tables correspondantes.

Maintenant, j'ai un Yii2 GridView de attrA2, attrA3 et attrB2. J'ai un filtre sur attrA2 et attrA3 afin que je puisse la recherche sur les valeurs de la colonne. J'ai aussi un travail de tri pour ces deux colonnes trop juste en cliquant sur l'en-tête de colonne. Je voudrais être en mesure d'ajouter ce filtrage et de tri sur attrB2 trop.

Mon TableASearch modèle ressemble à ceci:

public function search($params){
    $query = TableA::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    $this->addCondition($query, 'attrA2');
    $this->addCondition($query, 'attrA2', true);
    $this->addCondition($query, 'attrA3');
    $this->addCondition($query, 'attrA3', true);

    return $dataProvider;
}

Dans mon TableA modèle, j'ai mis la valeur comme ce

    public $relationalValue;

public function afterFind(){
    $b = TableB::find(['attrB1' => $this->attrB1]);
    $this->relationalValue = $b->relationalValue;
}

Bien qu'il n'est probablement pas la meilleure façon de le faire. Je pense que je dois utiliser $relationalValue quelque part dans ma fonction de recherche, mais je ne suis pas sûr de savoir comment. De même, je voudrais être en mesure de trier par cette colonne de trop, tout comme je peux pour attrA2 et AttrA3 en cliquant sur l'en-tête de lien". Toute aide serait appréciée. Merci.

Pouvez-vous peut-être mettre à jour votre question pour que le searchModel refléter les derniers changements de la structure.

OriginalL'auteur Mr Goobri | 2014-02-24