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

Pie*_*aro 1 php sql frameworks 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;
Run Code Online (Sandbox Code Playgroud)

这是我的功能

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,
    ));
}
Run Code Online (Sandbox Code Playgroud)

请帮我...

Eug*_*eph 5

这是使用 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); 
Run Code Online (Sandbox Code Playgroud)

这里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); 
Run Code Online (Sandbox Code Playgroud)