CActiveDataProvider не дает выбранные столбцы

    $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
));

Как выбрать все столбцы?

0

Решение

В Yii, если вы используете as для 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,
));
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector