0
    $criteria->select = 't.*,count(business_unit.id) as TotalBusinessUnits,count(users.id) as TotalUsers ,count(positions.id) as TotalPositions, count(skills.id) as TotalSkills , users.first_name , users.last_name, count(question_bank.id) as TotalQuestions';

    $criteria->condition = "`t`.status = '1'";
    $criteria->group = 't.id';
    $criteria->order = 'created DESC';
    $criteria->join = " inner join users on users.company_id = `t`.id";
    $criteria->join .= " left join business_unit on business_unit.company_id = `t`.id";
    $criteria->join .= " left join billingdetails on billingdetails.company_id = `t`.id";
    $criteria->join .= " left join positions on positions.company_id = `t`.id";
    $criteria->join .= " left join skills on skills.company_id = `t`.id";
    $criteria->join .= " left join question_bank on question_bank.company_id = `t`.id";

它工作正常并获得我选择的所有列。但是当我在 CActiveDataProvider 中传递它时,它只获得this属性。

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

我如何选择所有列?

4

1 回答 1

1

在 Yii 中,如果你使用asfor sql,它需要一个公共变量来存储值。

将所有自定义列名称添加为模型上的公共变量,并且都应该是花花公子。

所以如果你有 $criteria->select = 't.*,count(business_unit.id) as TotalBusinessUnits,这将创建相应的 sql。但是 Yii 不能识别TotalBusinessUnits为表格中的有效列。

所以如果你public $TotalBusinessUnits;在你的模型中添加 Yii 有一个地方来存储这个值。

然后你应该添加TotalBusinessUnits到你的安全属性规则中,以便 Yii 知道获取它是安全的。

public $TotalBusinessUnits;

public function rules(){
    return array(
        // your rules
        array('TotalBusinessUnits','safe'),
    );
}

public function search(){
    $criteria->select = 't.*,count(business_unit.id) as TotalBusinessUnits';
    // your criteria
    return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
    ));
}
于 2016-03-30T07:38:55.740 回答