2016-03-30 6 views
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になります。CActiveDataProviderは選択した列を与えません。

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

どのようにすべての列を選択しますか?モデルとすべてのパブリック変数がダンディあるべきなのYiiで

+1

モデルにパブリック変数として列名がリストされていますか?そのモデルに 'public $ TotalBusinessUnits;'を追加し、その値を取得できるかどうかを確認してください。 – Chris

+0

あなたはもっとそれを黙らせることができますか? –

答えて

1

あなたはSQLのasを使用している場合、それはに値を格納するパブリック変数を必要とする。

は、すべてのカスタム列名を追加します。

$criteria->select = 't.*,count(business_unit.id) as TotalBusinessUnitsがある場合、対応するSQLが作成されます。 YiiはTotalBusinessUnitsをテーブルの有効な列として認識しません。

モデルにpublic $TotalBusinessUnits;を追加すると、この値を保存する場所があります。

また、安全属性ルールに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, 
    )); 
} 
関連する問題