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.
OriginalL'auteur Mr Goobri | 2014-02-24
Vous devez vous connecter pour publier un commentaire.
Filtrage d'un gridview par une colonne est trés facile à Yii 2.0. Merci d'ajouter l'attribut de filtre d'une colonne gridview avoir des valeurs de recherche de:
ses bonnes et de travailler pour moi, mais tous les résultats dans DropDownList , comment changer ajax zone de texte comme filtre plus de zone de texte???
OriginalL'auteur iltaf khalid
Ceci est basé sur la description dans le guide. Le code de base pour la SearchModel vient de la Gii générateur de code. C'est aussi en supposant que $this->TableB a été mis en place à l'aide de
hasOne()
ouhasMany()
relation. Voir ce doc.1. Le programme d'installation recherche le modèle
Dans
TableASearch
modèle d'ajouter:Puis dans
TableASearch->search()
ajouter (avant$this->load()
):Ensuite la recherche de vos données (ci-dessous
$this->load()
):2. Configurer
GridView
Ajouter à votre vue:
$query->joinWith(['companyPosition']);
devrait être$query->joinWith(['TableB']);
Merci @pedak, fixe
Super réponse, je vous remercie, mais plus le temps Yii2 a évolué et j'ai réattribué la "solution" la plus simple des réponses. Des acclamations.
OriginalL'auteur Paul van Schayck
Je suis bloqué avec ce problème aussi, et ma solution est assez différente. J'ai deux modèles simples:
Livre:
Et Auteur:
Mais ma logique de recherche est dans l'autre modèle. Et je n'ai pas trouver comment puis-je mettre en œuvre la recherche sans créer de champ supplémentaire
author_first_name
. Donc, c'est ma solution:C'est pour la création d'alias de table:
function($query) { $query->from(['author' => 'authors']);}
Et GridView code est:
Je vais apprécier toutes les critiques et conseils.
OriginalL'auteur Alex