繁体   English   中英

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

[英]Multiple table query using CDbCriteria on Yii

我想在搜索功能上使用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,
    ));
}

请帮我...

这是使用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); 

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

另一个解决方案可能是使用JOIN参数并加入其他表,您可以在此处找到一些类似的解决方案: Yii:使用多个表

祝好运!

对不起,如果我有语言错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM