在Yii上使用CDbCriteria进行多表查询

时间:2014-01-23 15:20:35

标签: php sql yii frameworks

我想在搜索功能

上使用 CDbCriteria 在我的模型上实现此查询

这是查询

select t.*
from transaksi t, stock_cabang sc, cabang c
where t.id_stock_cabang = sc.id
and sc.id_cabang = c.id and c.id =1;

这是我的功能

public function search() {
    // @todo Please modify the following code to remove attributes that should not be searched.

    $criteria = new CDbCriteria;

    $criteria->compare('id', $this->id);
    $criteria->compare('jumlah_masuk', $this->jumlah_masuk);
    $criteria->compare('id_user', $this->id_user);
    $criteria->compare('id_stock_cabang', $this->id_stock_cabang);
    $criteria->compare('waktu', $this->waktu, true);

    return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
    ));
}

请帮助我...

2 个答案:

答案 0 :(得分:4)

这是使用3个表的示例代码。

    $criteria=new CDbCriteria;
        $criteria->with = array(
            'Table1' => array('alias'=> 't1', 'together' => true, ),
            'Table2' => array('alias'=> 't2', 'together' => true, ),
        );
    $criteria->together = true;
    $UserProduct = UserProduct::model()->find($criteria); 

此处alias是可选的。

可以添加更多选项,例如

#   GET THE FRIENDS OF CURRECT PROFILE 
    $criteria=new CDbCriteria;
    $criteria->with = array(
        'Relation1' => array('alias'=> 'r1', 'together' => true, 
            'select' => array('r1.user_id', 'r1.relator_id', 'relation',) ),
        'Relation2' => array('alias'=> 'r2', 'together' => true, 
            'select' => array('r2.relator_id', 'r2.user_id', 'relation',) ),
    );
    $criteria->addCondition('( r1.user_id = "'.$fId.'" OR r2.relator_id = "'.$fId.'" ) AND t.id = "'.$fId.'" AND 
    ( r1.relation != "2" AND r2.relation != "2" ) ');
    $criteria->together = true;
    $userFriends = User::model()->find($criteria); 

答案 1 :(得分:0)

首先,我建议你使用模型之间的关系,例如为每个表创建一个模型,然后使用BELONGS_TO关系,这可以解决你的问题,

另一个解决方案可能是使用JOIN parameter并加入其他表, 你可以在这里找到一些similliar解决方案:Yii: working with multiple tables

祝你好运!

抱歉,如果我有语言错误