如何关联多个联接CDbCriteria Yii 1.1

时间:2019-06-06 13:35:03

标签: php yii yii1.x

我在将JOIN中的表与CDbCriteria关联时遇到问题。我可以在两个相关的表之间使用单个JOIN来工作,但是有以下情况:

具有相关字段的表的结构:

table Tbl_recibo       table tbl_domicilio       table tbl_entidad
  Idrecibo               Iddomicilio          Identidad
  nombre                 nombre               nombre
  Iddomicilio            Identidad  

Codigo SQL:

SELECT
  `rec`.`idrecibo` AS 'Num_Recibo',
  `dom`.`matricula`,
  `dom`.`federado`,
  `ent`.`nombre` AS 'profesional',
  `dom`.`calle` AS 'domicilio'
FROM
  `tbl_recibo` AS rec
    LEFT JOIN `tbl_domicilio` AS dom ON `rec`.`iddomicilioapertura` = `dom`.`iddomicilio`
    LEFT JOIN `tbl_entidad` AS ent ON `dom`.`identidad` = `ent`.`identidad`

Codigo yii:

public function traerRecibos() {
    $r = new CDbCriteria();
    $dx = TblDomicilio::model()->tableName();
    $ex = TblEntidad::model()->tableName();
    $r->select='t.idRecibo,DX.idDomicilio';
    $r->join = 'left join ' . $dx . ' DX on DX.idDomicilio = t.idDomicilio';
    $r->join = 'left join ' . $ex . ' EX on EX.idEntidad=DX.idEntidad';
    return new CActiveDataProvider($this, array(
        'criteria' => $r,
        'pagination' => array('pageSize' => Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']),
    )));
}

替换tblRecibo表:

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(
        'tblEstadoreciboHasTblRecibos' => array(self::HAS_MANY, 'TblEstadoreciboHasTblRecibo', 'idRecibo'),
        'tblItemrecibowebs' => array(self::HAS_MANY, 'TblItemreciboweb', 'idRecibo'),
        'idCalendario0' => array(self::BELONGS_TO, 'TblCalendario', 'idCalendario'),
        'idDomicilioApertura0' => array(self::BELONGS_TO, 'TblDomicilio', 'idDomicilioApertura'),
        'idDomicilio0' => array(self::BELONGS_TO, 'TblDomicilio', 'idDomicilio'),
        'idPaquete0' => array(self::BELONGS_TO, 'TblPaquete', 'idPaquete'),
    );
}

我需要可视化相同的SQL数据,但是使用CDbCriteria,我无法从tblEntidad访问tblRecibo表中的数据。

1 个答案:

答案 0 :(得分:0)

您需要通过以下方式组合JOIN子句:

    $r->join = 'left join ' . $dx . ' DX on DX.idDomicilio = t.idDomicilio ';
        . 'left join ' . $ex . ' EX on EX.idEntidad=DX.idEntidad';

在您的代码中,您只是覆盖对$r->join的首次分配。

您还可以考虑使用with(),因此您可以重用关系定义来建立JOIN条件。参见this guide article about relations