CRUD admin view -> sortieren und suchen in getRelated-Spalten

ich habe eine AR-Klasse User mit der Relation


'idMitarbeiter' => array(self::BELONGS_TO, 'Mitarbeiter', 'id_mitarbeiter'),

im admin View habe ich das eingebunden mit


<?php

$provider=$model->search();

$provider->pagination->pageSize=20;

$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'user-grid',

	'dataProvider'=>$provider,

	'filter'=>$model,

	'columns'=>array(

		array(

			'name'=>'id_mitarbeiter',

			'value'=>'$data->idMitarbeiter ? $data->idMitarbeiter->name : \'\'',

		),

		'username',

		'email',

		'rolle',

		array(

			'class'=>'ButtonColumn',

		),

	),

)); ?>

sortieren und filtern wirkt sich aber auf id_mitarbeiter und nicht auf idMitarbeiter->name aus.

Wie bringe ich den admin view dazu, nach idMitarbeiter->name zu sortieren und zu filtern?

Hi und willkommen,

Kannst du mal die search() Methode in deine User-Klasse zeigen?

Übrigens gabs dieses Thema auch schon oft im Hauptforum, hab aber grad keinen Link parat.

meine search() methode sieht wie folgt aus (ist die von gii generierte):


	public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('id',$this->id);

		$criteria->compare('id_mitarbeiter',$this->id_mitarbeiter);

		$criteria->compare('username',$this->username,true);

		$criteria->compare('password',$this->password,true);

		$criteria->compare('email',$this->email,true);

		$criteria->compare('rolle',$this->rolle,true);

		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

		));

	}

nun denn, das filtern habe ich mal gelöst mit


	public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('id',$this->id);

		// $criteria->compare('id_mitarbeiter',$this->id_mitarbeiter);

		$criteria->with=array('idMitarbeiter');

		$criteria->addSearchCondition('idMitarbeiter.name',$this->id_mitarbeiter);

		$criteria->compare('username',$this->username,true);

		$criteria->compare('password',$this->password,true);

		$criteria->compare('email',$this->email,true);

		$criteria->compare('rolle',$this->rolle,true);

		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

		));

	}

fehlt mir noch die richtige sortierung im CGridView (derzeit wird nach der id_mitarbeiter sortiert) …

Probiers mal damit:




return new CActiveDataProvider(get_class($this), 

    array(

        'criteria'=>$criteria,

        'sort'=>array(

            'attributes'=>array(

                'username',

                // ... hier deine weiteren sortierbaren attribute

                'id_mitarbeiter'=>'idMitarbeiter.name',

            ),

        ),

    )

);

Übrigens find ich den Namen für deine Relation idMitarbeiter etwas verwirrend. Warum nicht einfach mitarbeiter?

super, danke, funktioniert bestens!

die relation heißt bei mir idMitarbeiter, weil das gii es so generiert hat, und ich ändere am generierten code mal nichts (hab noch 17 weitere tabellen in der datenbank, und habe mich für yii entschieden, weil sich damit recht flott brauchbares generieren lässt).

lg

birgit