Tablas vinculadas con AR

Hola a todos;

Llevo un tiempo leyendo el foro y haciendo mis primeras cosas con Yii, y ahora me encuentro con una duda. Quiero mostrar en un grid los datos de una tabla prncipal y otra vinculada como se haría con un inner join "a pelo".

He creado el modelo en Gii y lo que quiero es mostrar los datos en un grid (los datos todos juntos y poder hacer búsquedas y ordenarlos). Conseguí que me funcionase haciendo un modelo para cada tabla, pero de esta forma no puedo ni ordenar ni buscar por los campos de la tabla secundaria en el grid.

También he creado las relaciones, pero como si nada, si no tengo el modelo creado de la tabla auxiliar da error.

Estos son los ficheros:

Modelo:







public function relations()

	{

			return array(

			'user' => array(self::BELONGS_TO, 'User', 'userid'),

		);

	}

Vista:


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

	'id'=>'balance-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id',

		'timestamp',

		'user.username',

		'title',

		'message',

		'message_read',

		array(

			'class'=>'CButtonColumn',

		),

	),

A ver que consejos me podeis dar.

Un saludo.

Agregaste la tabla relacionada al resultado de tu metodo search() ?

En el método search tengo lo siguiente:


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,true);

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

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

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

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

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

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

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

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

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

                //$criteria->compare('user.username',$this->user.username);

		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

He comentado las pruebas realizadas y en los dos casos me da error ya que ese campo no existe en esa tabla ya que está en otra.

Se que algo más tengo que hace pero no doy con ello, me leí un montón de veces la sección AR del manual y tampoco me ayudó mucho. Si lo hago con DAO si me funciona y lo tengo mas claro pero no entiendo como hacerlo con AR.

Un saludo.

Entonces creo que solo faltaria agregar a tu $criteria el with …


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

porque utilizas los atributos de la relacion, pero en ningun lugar veo que la agregas…

Ok, había leido algo sobre el with, pero en este contexto no lo probé.

Voy a probar haber si hay suerte y no me falta algo más.

Un saludo.

Sigue sin poder buscar, no si lo puse bien (en el modelo):


public function search()

	{

		$criteria=new CDbCriteria;


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

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

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

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

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

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

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

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

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

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

                //$criteria->compare('user.username',$this->user.username);

                //$criteria->compare('user.username',$this->username);

		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

Si se te ocurre algo mas para probar o algún manual se agradece, ya que lo encontré sobre esto es mas bien escaso.

Un saludo.