まず、Mail、Client、MailTemplate、Operatorの4つのモデルを作成する必要があります。
メールモデルで関係を定義します。
public function relations()
{
return array(
'client' => array(self::BELONGS_TO, 'Client', 'customerID'),
'operator' => array(self::BELONGS_TO, 'Operator', 'operatorID'),
'mailTemplate' => array(self::BELONGS_TO, 'MailTemplate', 'templateID'),
);
}
と...
$criteria = new CDbCriteria;
$criteria->select = new CDbExpression('t.sendDate, t.status, client.name, client.email, mailTemplate.name, mailTemplate.subject, CONCAT( operator.firstName, " ", operator.lastName ) operator');
$criteria->addSearchCondition('client.name', 'L', true);
$criteria->addSearchCondition('client.email', '@gmail.com', true);
$criteria->compare('mailTemplate.sendDate', '<2012-07-31');
$criteria->compare('mailTemplate.sendDate', '>2012-06-30');
さて、今、私たちはアイテムを見つけることができます:
$mails = Mail::model()->with(array('client', 'operator', 'mailTemplate'))->findAll($criteria);
2番目の質問の更新:
メールモデルでメソッド検索を定義します。
public function search()
{
/* Criteria from my first answer */
return new CActiveDataProvider('Mail', array(
'criteria' => $criteria,
));
}
グリッドビューでは、リレーションを使用する必要がある列$dataはリレーションを持つメールモデルの1つのアイテムです。
'columns' => array(
array(
'name' => 'prop_defined_in_mail_model',
'value' => '$data->client->id',
),
),