にこのSQLを使用するためにどのように私は現在、このSQLCDbCriteria
SELECT
MAX(CASE WHEN uv.user_type_variables_id = 1 THEN uv.value ELSE NULL END) Question1,
MAX(CASE WHEN uv.user_type_variables_id = 2 THEN uv.value ELSE NULL END) Question2,
MAX(CASE WHEN uv.user_type_variables_id = 3 THEN uv.value ELSE NULL END) Question3,
MAX(CASE WHEN uv.user_type_variables_id = 4 THEN uv.value ELSE NULL END) Question4,
MAX(CASE WHEN uv.user_type_variables_id = 5 THEN uv.value ELSE NULL END) Question5,
MAX(CASE WHEN uv.user_type_variables_id = 6 THEN uv.value ELSE NULL END) Question6
FROM tbl_event_attendees AS ea
LEFT JOIN tbl_user AS u ON ea.user_id = u.id
LEFT JOIN tbl_event AS e ON ea.event_id = e.id
LEFT JOIN tbl_user_variables AS uv on u.id = uv.user_id
GROUP BY ea.id
を持っていると私は関係を拡張し、私の既存のCDbCriteria +にそれを配置する必要があります。各質問1〜6は、私がcgridviewの中に入れるために使うことができる変数にする必要がありますが、私はそれを動作させるのに苦労しています。 CSQLdataproviderを使うとうまくいきますが、すでに持っている既存の基準が必要です。
私の現在の基準
public function search() {
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id, true);
$criteria->compare('event_id', $this->event_id, true);
$criteria->compare('status_id', $this->status_id, true);
$criteria->compare('checkin_status_id', $this->checkin_status_id, true);
// $criteria->compare('guest_invites', $this->guest_invites, true);
$criteria->compare('guest_of_user_id', $this->guest_of_user_id, true);
$criteria->compare('user_id', $this->user_id, true);
$criteria->compare('assign_group', $this->assign_group, true);
// $criteria->with = 'eventAttendeesGroup';
$criteria->with = 'user';
$criteria->compare('user.forename', $this->user_forename, true);
$criteria->compare('user.surname', $this->user_surname, true);
$criteria->compare('user.company', $this->user_company, true);
$criteria->compare('user.telephone', $this->user_telephone, true);
$criteria->compare('user.dob', $this->user_dateofbirth, true);
//need to get rid of this
$criteria->compare('userVariables.value', $this->userType_value, true);
$criteria->order = 'user.surname ASC';
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
//manages the pagination and how many users appear on the onsite reg page
'pagination'=>array('pageSize'=>50),
//'pagination'=>false,
));
}
誰もが任意のアイデアを得ましたか。
私は各質問に変数を設定して、それらをusertype.variableや$ this->変数のような関係に追加する必要があると推測します。
編集。
私は
function newsearch(){
$rawData=Yii::app()->db->createCommand('SELECT
MAX(CASE WHEN uv.user_type_variables_id = 1 THEN uv.value ELSE NULL END) Question1,
MAX(CASE WHEN uv.user_type_variables_id = 2 THEN uv.value ELSE NULL END) Question2,
MAX(CASE WHEN uv.user_type_variables_id = 3 THEN uv.value ELSE NULL END) Question3,
MAX(CASE WHEN uv.user_type_variables_id = 4 THEN uv.value ELSE NULL END) Question4,
MAX(CASE WHEN uv.user_type_variables_id = 5 THEN uv.value ELSE NULL END) Question5,
MAX(CASE WHEN uv.user_type_variables_id = 6 THEN uv.value ELSE NULL END) Question6
FROM tbl_event_attendees AS ea
LEFT JOIN tbl_user AS u ON ea.user_id = u.id
LEFT JOIN tbl_event AS e ON ea.event_id = e.id
LEFT JOIN tbl_user_variables AS uv on u.id = uv.user_id
GROUP BY ea.id')->queryAll();
// or using: $rawData=User::model()->findAll();
return $dataProvider=new CArrayDataProvider($rawData, array(
'id'=>'Questions',
'sort'=>array(
'attributes'=>array(
'Question1', 'Question2', 'Question3',
),
),
'pagination'=>array(
'pageSize'=>10,
),
));
は、グリッド内のSQLを表示するには得ることができますが、私はまだこれと一緒に私のモデルデータにアクセスすることはできません。
実際にCDbCriteriaを使用したいのですが、それを実装することは可能ですが、CDbCommandを使用してカスタムクエリを書く方が簡単かもしれません。 CArrayDataProviderを使用してください – Tim
これは継承したプロジェクトなので、この機能にはあまりにも多くの依存関係があります。私は2つのデータプロバイダを一緒に配列として追加したり結合したりすることを考えましたが、SQLデータとモデルからのデータが検索/エクスポートを使用するときに全くリンクしていないので、結果を得ることができませんでしたのデータ。 – DevAL
私はこれが役立つ場合は私に答えを追加しました。 – Tim