Olá Pessoal,
Tenho duas tabelas uma chamada mail_incoming que a tabela pai(PK duplo inc_id e inc_queue_id) e a outra chamada mail_outgoing filha(PK duplo out_id e out_queue_id)
Elas não possui relacionamento devido a alguns registros repetirem em algum momento. Porem o que liga elas efetivamente são os campos inc_queue_id e out_queue_id
Bom, o meu problema é simples mas já estou a 2 dias quebrando a cabeça para simplismente o campo out_to da tabela mail_outgoing no CGridView
Bom eu segui o tuturial http://www.yiiframework.com/wiki/280/1-n-relations-sometimes-require-cdbcriteria-together/
Segue o meu model MailIncoming:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('inc_queue_id', 'required'),
array('inc_size, inc_nrcpt', 'numerical', 'integerOnly'=>true),
array('inc_queue_id', 'length', 'max'=>12),
array('inc_client_connect', 'length', 'max'=>15),
array('inc_client_helo, inc_message_id, inc_from, inc_subject', 'length', 'max'=>255),
array('inc_date, inc_time', 'safe'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('out_to,inc_id, inc_date, inc_time, inc_queue_id, inc_client_connect,
inc_client_helo, inc_message_id, inc_from, inc_subject, inc_size, inc_nrcpt', 'safe', 'on'=>'search'),
);
}
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'delivered'=>array(self::HAS_MANY,'MailOutgoing',
'out_queue_id',
'joinType'=>'INNER JOIN',
),
);
}
public $out_to;
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->with = array('delivered');;
$criteria->together = true;
$criteria->compare('inc_id',$this->inc_id);
$criteria->compare('inc_date',$this->inc_date,true);
$criteria->compare('inc_time',$this->inc_time,true);
$criteria->compare('inc_queue_id',$this->inc_queue_id,true);
$criteria->compare('inc_client_connect',$this->inc_client_connect,true);
$criteria->compare('inc_client_helo',$this->inc_client_helo,true);
$criteria->compare('inc_message_id',$this->inc_message_id,true);
$criteria->compare('inc_from',$this->inc_from,true);
$criteria->compare('inc_subject',$this->inc_subject,true);
$criteria->compare('inc_size',$this->inc_size);
$criteria->compare('inc_nrcpt',$this->inc_nrcpt);
$criteria->compare('delivered.out_to',$this->out_to);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
Observem que o "$this->out_to" esta declarado e o "delivered" e o alias do relacionamento. Também temos as rules onde eu declarei a variavel "out_to"
Segue a View:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'mail-incoming-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'inc_id',
'inc_date',
'inc_time',
'inc_queue_id',
'inc_client_connect',
'inc_client_helo',
array(
'name'=>'out_to',
'value'=>'$data->delivered->out_to',
'type'=>'text',
),
/*
'inc_message_id',
'inc_from',
'inc_subject',
'inc_size',
'inc_nrcpt',
*/
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Observem o trecho:
array(
'name'=>'out_to',
'value'=>'$data->delivered->out_to',
'type'=>'text',
),
Esse linka com os campos da tabela corretamente.
E por ultimo segue a SQL que o Yii monta:
SELECT "t"."inc_id" AS "t0_c0", "t"."inc_date" AS "t0_c1", "t"."inc_time" AS "t0_c2", "t"."inc_queue_id" AS "t0_c3",
"t"."inc_client_connect" AS "t0_c4", "t"."inc_client_helo" AS "t0_c5", "t"."inc_message_id" AS "t0_c6", "t"."inc_from"
AS "t0_c7", "t"."inc_subject" AS "t0_c8", "t"."inc_size" AS "t0_c9", "t"."inc_nrcpt" AS "t0_c10", "delivered"."out_id"
AS "t1_c0", "delivered"."out_date" AS "t1_c1", "delivered"."out_time" AS "t1_c2", "delivered"."out_queue_id"
AS "t1_c3", "delivered"."out_to" AS "t1_c4", "delivered"."out_to_orig" AS "t1_c5", "delivered"."out_relay"
AS "t1_c6", "delivered"."out_delay" AS "t1_c7", "delivered"."out_delays" AS "t1_c8", "delivered"."out_dsn"
AS "t1_c9", "delivered"."out_status" AS "t1_c10", "delivered"."out_status_message" AS "t1_c11",
"delivered"."out_queue_id_remote" AS "t1_c12" FROM "mail_incoming" "t"
INNER JOIN "mail_outgoing" "delivered" ON ("delivered"."out_queue_id"="t"."inc_queue_id")
LIMIT 10
O que acontece é que infelizmente a Grid não apresenta o campo out_to do relacionamento segue o print da tela que esta em anexo
2764
Pessoal qualquer ajuda será bem vinda.
Abraços e desde já agradeço
Rodrigo