Я мог найти ответ.Это все, что я сделал.
Ниже приведены две таблицы, которые у меня есть.Заказ и пользователь
У меня есть страница заказа / администратора, сгенерированный по умолчанию код обеспечивает поиск только в таблице данных заказа.Я хочу связать поле имени пользовательских таблиц в критериях поиска.
Это начальный вид страницы поиска.
Я хочу интегрировать имя пользователя из другой таблицы в этот поиск.тогда окончательный вид будет следующим:
, так что это шаги, которые я сделал.
сначала в модели заказа, у меня есть следующие отношения
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(
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
);
}
This is generated by Yii framework , i did nothing :)
Then , i changed the search method as follows
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('t.order_create_date',$this->order_create_date,true);
$criteria->compare('t.price',$this->price,true);
$criteria->compare('t.bank_account_number',$this->bank_account_number,true);
$criteria->compare('t.hardwaredetail_Id',$this->hardwaredetail_Id);
//$criteria->compare('user_id',$this->user_id);
$criteria->compare('t.order_update_date',$this->order_update_date,true);
$criteria->compare('t.is_received',$this->is_received);
$criteria->compare('t.order_received_date',$this->order_received_date,true);
$criteria->compare('t.is_notify_by_email',$this->is_notify_by_email);
$criteria->compare('t.warehouse_offered_price',$this->warehouse_offered_price,true);
$criteria->compare('t.warehouse_offered_price_date',$this->warehouse_offered_price_date,true);
$criteria->compare('t.orderstatus_id',$this->orderstatus_id);
$criteria->together = true;
$criteria->compare('t.id',$this->id,true);
$criteria->with = array('user');
$criteria->compare('name',$this->user,true,"OR");
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
важно поставить t перед t
если поле первичного ключа таблицы заказа, если оба имеют имя сохранения.в моем случае это id и id, поэтому мне пришлось поставить t.
Другое дело, порядок элементов
$ criterial-> togeter = true;должен предшествовать реляционным элементам.
Затем вы обновили метод правил в таблице Order.я добавил пользователя и имя файла в безопасные атрибуты.
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
//array(' orderstatus_id', 'required'),
array('hardwaredetail_Id, user_id, is_received, is_notify_by_email, orderstatus_id', 'numerical', 'integerOnly'=>true),
array('price, warehouse_offered_price', 'length', 'max'=>10),
array('bank_account_number', 'length', 'max'=>100),
array('order_create_date, order_update_date, order_received_date, warehouse_offered_price_date, user,name', 'safe'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, order_create_date, price, bank_account_number, hardwaredetail_Id, user_id, order_update_date, is_received, order_received_date, is_notify_by_email, warehouse_offered_price, warehouse_offered_price_date, orderstatus_id', 'safe', 'on'=>'search'),
);
}
Наконец-то обновите свой код интерфейса.
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'order-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'order_create_date',
'price',
'bank_account_number',
array(
'name'=>'user',
'value'=>'$data->user->name'
)
)); ?>
Я обновил администратор заказа с помощью
array(
'name'=>'user',
'value'=>'$data->user->name'
)
Это то, что я сделал, и это сработало для меня.спросите меня, если вам нужна помощь.Спасибо всем, кто интересуется этой проблемой.