2014-02-07 6 views
0

Я хочу это:Yii DataProvider 3 таблицы

SELECT i.inmueble_nombre, a.arrendatario_nombre, a.arrendatario_email, c.contrato_fecha_ini, c.contrato_fecha_fin 
FROM zf_inmuebles i, zf_arrendatarios a, zf_contratos c 
WHERE c.contrato_estado = 'ALta' 
AND i.inmueble_id = c.zf_inmuebles_inmueble_id 
AND a.arrendatario_id = c.zf_arrendatarios_arrendatario_id 

В DataProvider для CListView, как я могу это сделать?

+0

у вас есть 3 модели с отношениями в каждой модели? –

+0

У меня есть 1 модель для каждой таблицы –

+0

, но они не связаны. Я хотел сделать вручную: D –

ответ

1

Один простой вариант - использовать CSqlDataProvider. В основном, вы просто задаете запрос и счетчик, а поставщик данных возвращает массив (с выбранными вами столбцами как ключи) для каждого элемента списка.

+0

и как я называю данные? $ Данных-> i.inmueble_id? –

+0

Что-то вроде $ data ['inmueble_id']. Вообще-то, я не уверен в ключе в вашем случае. Я рекомендую вам сделать SELECT с помощью «AS» (например: SELECT i.inmueble_nombre AS nombre) –

+0

Если вы не хотите использовать «AS», напечатайте данные $ с помощью CVarDumper: dump ($ data, 10, true) чтобы увидеть ключи. –

0

Попробуйте этот код.

В контроллере.

$sql = "SELECT i.inmueble_nombre, a.arrendatario_nombre, a.arrendatario_email, c.contrato_fecha_ini, c.contrato_fecha_fin 
    FROM zf_inmuebles i, zf_arrendatarios a, zf_contratos c 
    WHERE c.contrato_estado = 'ALta' 
    AND i.inmueble_id = c.zf_inmuebles_inmueble_id 
    AND a.arrendatario_id = c.zf_arrendatarios_arrendatario_id"; 

    $dataProvider=new CSqlDataProvider($sql,array(
    'pagination'=>array(
    'pageSize'=> '10', //no of record per page here 
    ),); 
$this->render('VIEW_NAME', array('dataProvider'=>$dataProvider)); 

В VIEW_FILE

$this->widget('zii.widgets.CListView', 

      array(
         'dataProvider'=>$dataProvider, 
         'ajaxUpdate'=>true, 
         'columns'=>array(
         array('header'=>'Inmueble Nombre','name'=>'inmueble_nombre'), 
         array('header'=>'Arrendatario Nombre','name'=>'arrendatario_nombre'), 

), 
)); 
+0

Это не GridView, его ListView, колонки не работают :( –

+0

Пожалуйста, проверьте свои вопросы. Вы запросили только clistview –

+0

Это работает! This this $ dataProvider = new CSqlDataProvider ($ sql, array ('keyField' => 'inmueble_id ',' pagination '=> array (' pageSize '=> 1))); Но разбиение на страницы не отображается, почему? –

Смежные вопросы