简体   繁体   English

Yii CDbCriteria SQL

[英]Yii CDbCriteria sql

I'm developing Yii powered application. 我正在开发基于Yii的应用程序。 I want to convert this SQL: 我想转换此SQL:

SELECT m.sendDate, m.status, c.name, c.email, mt.name, mt.subject, CONCAT( op.firstName,  ' ', op.lastName ) operator
FROM  `mail` m, client c, mailTemplate mt, operator op
WHERE m.customerID = c.id
AND m.operatorID = op.id
AND m.templateID = mt.id
AND c.name LIKE  '%L%'
AND c.email LIKE  '%@gmail.com%'
AND m.sendDate <  '2012-07-31'
AND m.sendDate >  '2012-06-30'

into CDBcriteria but don't know how. 进入CDBcriteria,但不知道如何。

First, you must to create 4 models: Mail, Client, MailTemplate, Operator. 首先,您必须创建4个模型:邮件,客户端,邮件模板,操作员。

In Mail model define relations: 在邮件模型中定义关系:

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'),
    );
}

And... 和...

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

Well, now we can find items: 好了,现在我们可以找到以下项目:

$mails = Mail::model()->with(array('client', 'operator', 'mailTemplate'))->findAll($criteria);

UPDATE for second question: 更新第二个问题:

Define method search in your Mail model: 在您的邮件模型中定义方法搜索:

public function search()
{
    /* Criteria from my first answer */
    return new CActiveDataProvider('Mail', array(
        'criteria' => $criteria,
    ));
}

and in gridview, columns you must use relations $data is a one item of Mail model with relations. 在gridview中,必须使用关系的列$ data是具有关系的Mail模型的一项。

'columns' => array(
    array(
        'name' => 'prop_defined_in_mail_model',
        'value' => '$data->client->id',
    ),
),

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM