【问题标题】:Yii dataprovider 3 tablesYii dataprovider 3 表
【发布时间】:2014-02-07 15:40:33
【问题描述】:

我想要这个:

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

在 Clistview 的数据提供程序中,我该怎么做?

【问题讨论】:

  • 你有 3 个模型,每个模型都有关系吗?
  • 每张桌子我都有一个模型
  • 但它们不相关,我想手工完成:D

标签: mysql yii clistview


【解决方案1】:

一个简单的选择是使用CSqlDataProvider。基本上,您只需设置查询和计数,数据提供程序将为每个列表项返回一个数组(以您选择的列作为键)。

【讨论】:

  • 我怎么称呼数据? $data->i.inmueble_id?
  • 类似于 $data[ 'inmueble_id' ] 的东西。实际上,我不确定您的情况的关键。我建议您使用“AS”进行 SELECT(例如:SELECT i.inmueble_nombre AS nombre)
  • 如果您不想使用“AS”,请使用 CVarDumper:dump( $data, 10, true ) 打印 $data 以查看密钥。
  • 我都是这样写的,但这就是问题所在:未定义的索引:id
  • 受保护的函数 fetchKeys() 116 { 117 $keys=array(); 118 if($data=$this->getData()) 119 { 120 if(is_object(reset($data))) 121 foreach($data as $i=>$item) 122 $keys[$i]=$项目->{$this->keyField}; 123 else 124 foreach($data as $i=>$item) 125 $keys[$i]=$item[$this->keyField]; 126 } 127 返回 $keys; 128}
【解决方案2】:

试试这个代码。

在控制器中。

    $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'), 

),
)); 

【讨论】:

  • 请检查您的问题。您只要求 clistview
  • 有效!像这样 $dataProvider=new CSqlDataProvider($sql,array('keyField' =>'inmueble_id','pagination'=>array('pageSize'=>1)));但是分页不显示,为什么?
  • 字段“列”在 CListview 中不起作用,这就是我的意思
  • 好的。我明白了。所以现在除了分页之外一切都在工作?
  • 是的,分页不显示
猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多