Yii Framework - CGridView de tri des colonnes associées
Merci d'avance à tous ceux qui peuvent aider. J'ai été à la recherche d'une réponse, mais je n'ai pas trouvé un encore. J'ai couru dans des "solutions" qui n'ont pas travaillé qui s'exécutent à partir du 1er de ligne, à la ré-écriture d'une classe entière.
J'ai eu la "grille" pour montrer la relation, et suis en mesure d'utiliser la fonction de recherche. Ce que je n'arrive pas à comprendre est la fonctionnalité de tri. L'en-tête de colonne devient non cliquable, une fois les changements suivants ont été apportés.
C'est ce que j'ai:
La relation nom/d'un label "entreprise," le programme d'installation de l'Employé modèle.
Table: Employé -- Colonne: idCompany
&
Tableau: Entreprise -- Colonne: companyNick
admin.php - VUE
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'employee-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'company',
'value'=>'$data->company->companyNick',
),
'lastName',
'firstName',
ETC...
Employee.php - MODÈLE
public function search()
{
//Warning: Please modify the following code to remove attributes that
//should not be searched.
$criteria=new CDbCriteria;
//Company Relation Search
$criteria->compare('company.companyNick',$this->company,true);
$criteria->with='company';
//stock
$criteria->compare('idEmployee',$this->idEmployee,true);
$criteria->compare('idAccount',$this->idAccount,true);
ETC...
OriginalL'auteur Logan Klenner | 2011-05-20
Vous devez vous connecter pour publier un commentaire.
J'ai eu les mêmes problèmes et à la fin, résolu de cette façon:
Modèle de la méthode de Recherche:
Fichier de vue:
));
De cette façon, je suis de la sélection d'un seul champ de la table dans la clause order by et alors la commande, en vous créez la table de jointure dans l'expression, dans ce cas, c'est -
people.person_id = t.assigned_to
(où t est un alias de la table fournie par yii). C'est peut-être pas le moyen le plus efficace pour créer de la clause order by, mais il fonctionne!OriginalL'auteur Mike H
Cela semble être une question quotidienne sur [yii]. Bande de choses de votre fonction de recherche, et d'ajouter un filtre d'attribut à votre CGridView colonne comme suit:
Vous pouvez toujours. Cependant, si vous souhaitez trier par le nom de la société plutôt que de la clé étrangère, vous devrez le modifier à votre dataprovider (par exemple, $model->search())
Je suis débutant sur le droit chemin avec CSort... vous n'êtes pas très précis. Merci pour me dire que j'ai besoin de changer "quelque chose" pour le faire fonctionner. Évidemment.
Wow, je suis sûr que vous aurez beaucoup de kilométrage de tout "je suis une intolérable, ingrat jerk à tout le monde qui tente de m'aider" shtick.
Et bien, merci. Essayez de lire la question la prochaine fois, plutôt que de répondre à une quelconque réponse à ce qui n'est pas lié.
OriginalL'auteur Ryan Bales
Il est également bon d'explication comment faire cela sur Yii site web page de Wiki:
http://www.yiiframework.com/wiki/281/searching-and-sorting-by-related-model-in-cgridview/
OriginalL'auteur zmilan
J'aime Mike H de réponse. Je tiens également à souligner que vous avez pu, au lieu de saisir le SQL brut, de l'utiliser avec() pour effectuer une requête relationnelle, puis sélectionnez à false pour empêcher effectivement chargement des modèles connexes. Vous pouvez également utiliser l'attribut associé du attributeLabel dans la vue en passant la dot-notée chaîne, par exemple,:
OriginalL'auteur Scott Gardner