У меня проблема с отображением данных в cgridview с использованием внешних ключей. Это мой случай, у меня есть сотрудник таблицы (идентификатор, имя пользователя), клиент (идентификатор, имя пользователя) и транзакция (идентификатор, идентификатор сотрудника, идентификатор клиента). Внешний ключ employeeId к employee.id, а clientId — внешний ключ к client.id. Теперь я хочу показать имя сотрудника и имя клиента вместо их идентификатора в транзакции admin.php. Это мой код:
class Transaction extends CActiveRecord
{
public $client_search;
public $employee_search;
public function rules()
{
return array(
.
.
.
array('id, employeeId, clientId, balance, status, date, client_search, employee_search', 'safe', 'on'=>'search'),
);
}
public function relations()
{
return array(
'employee' => array(self::BELONGS_TO, 'Employee', 'employeeId'),
'client' => array(self::BELONGS_TO, 'Client', 'clientId'),
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->with = array( 'client', 'employee' );
$criteria->together = true;
$criteria->compare('t.id',$this->id,true);
$criteria->compare('employee.username', $this->employee_search, true );
$criteria->compare('client.username', $this->client_search, true );
$criteria->compare('t.balance',$this->balance,true);
$criteria->compare('t.status',$this->status);
$criteria->compare('t.date',$this->date,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
//the other functions are there, i don't edit it.
}
это моя модель/Transaction.php
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'transaction-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
array(
'header' => 'Employee',
'name' => 'employee_search',
'value' => '$data->employee->username',
),
array(
'header' => 'Client',
'name' => 'client_search',
'value' => '$data->client->username',
),
array(
'class'=>'CButtonColumn',
),
),
));
это мои представления/транзакция/admin.php. и этот код выдал мне ошибку при попытке получить свойство не-объекта (помечено $data->employee->id). На самом деле мне удалось показать имя сотрудника вместо идентификатора сотрудника, но после этого я использую тот же метод для клиента, и появляется ошибка. кто-нибудь может мне помочь? Мой метод заключается в том, чтобы сделать общедоступным employee_search, добавить правила, добавить отношение, добавить $creiteria->with, затем изменить файл admin.php. Кто-нибудь, пожалуйста, помогите мне.
//ОБНОВЛЕНИЕ РЕШЕНО. На самом деле это моя вина. Ошибка в базе данных об отношении (внешний ключ). Моя кодировка в порядке.
$model
), например, вероятно, поможет нам. - person Felipe   schedule 05.05.2014