Зачем CArrayDataProvider если с это все можно реализовать с помощью CActiveDataProvider?
Если я правильно понимаю то сначала в модели таблицы tbl_auto нужно указать реляцию
public function relations() {
return array(
'modelFiles' => array(self::MANY_MANY, 'File', 'tbl_model_file(id_auto, if_file)'),
);
}
Потом создал бы в модели машин следующее:
public function search() {
$criteria = new CDbCriteria;
$criteria->with = array('modelFiles');
$criteria->together = true;
$criteria->compare('t.id_auto', $this->id_auto);
$criteria->compare('modelFiles.id_file', $this->id_file);
return new CActiveDataProvider($this, array(
'criteria' => $criteria
));
}
Сортировка будет и по файлам, ну а вдруг тогда надо в модели машин прописать ещё:
public $id_file
и в rules модели внести её.
Ну и теперь вызвать все это в контроллере:
$model = new Auto('search');
$model->unsetAttributes();
if (isset($_GET['Auto'])) {
$model->attributes = $_GET['Auto'];
}
$this->render('index', array(
'model' => $model,
));
И вьюха:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
array(
'name' => 'id_auto',
'type' => 'raw',
'value' => '$data->name_auto',
'filter' => CHtml::dropDownList('Auto[id_auto]',
$this->id_auto, CHtml::ListData(Auto::model()->findAll(), 'id_auto', 'name_auto'),
array('empty'=>'Все')),
),
array(
'name' => 'id_file',
'type' => 'raw',
'value' => '$data->getRelatedFiles()',
'filter' => CHtml::dropDownList('Auto[id_file]',
$this->id_file, CHtml::ListData(File::model()->findAll(), 'id_file', 'name_file'),
array('empty'=>'Все')),
)
),
));
?>
Ну ещё теперь в модели надо будет добавить следующее:
public function getRelatedFiles() {
$arr = array();
foreach ($this->modelFiles as $file){
$arr[] = $file->name_file;
}
return implode(',<BR>', $arr);
}
Возможно будет выводить по 1 файлу, тогда надо будет чуть переделать функцию, попробуй пока так.
Ещё проверь названия полей и моделей, писал свои т.к. твою структуру таблиц я не знаю.
Если все же заработает тогда надо будет переделать вывод значений для dropDown в гриде, findAll не очень вариант