php - Yii CDbCriteria sql

标签 php yii

我正在开发 Yii 驱动的应用程序。我想转换这个 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'

进入 CDBcriteria 但不知道如何。

最佳答案

首先,您必须创建 4 个模型:Mail、Client、MailTemplate、Operator。

在邮件模型中定义关系:

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

第二个问题更新:

在邮件模型中定义方法搜索:

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

在gridview中,列必须使用关系 $data是Mail模型中具有关系的一项。

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

关于php - Yii CDbCriteria sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11734801/

相关文章:

php - Yii 1.1 查询量过多,如何优化?

php - 在多维数组中查找最小/最大值

php - 以不同方式设置 PHP echo 输出的样式

php - htmlentities() 与 htmlspecialchars()

php - Yii Framework 未知属性异常

php - 添加 Materialize css 后尝试在 Yii2 上获取非对象错误的属性

php - Yii 2 如何获取当天的所有数据

php - 是否有可能找到与单个正则表达式重叠的匹配项?

php - 使用 Zend Framework 2 加速 6,000 行查询

php - Yii 应用程序如何保护连接字符串?