使用Yii自定义我自己的SQL语句

时间:2014-01-16 01:56:37

标签: php sql function yii

是的我阅读了文档,但有时候我也需要一些不是来自书籍的帮助。

我正在尝试编写一个脚本,只要管理员发布新的博客条目,该脚本就会向数据库中的所有用户发送电子邮件。到目前为止,这是我的代码:

public function actionCreate()
{
    $model=new TbPost;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['TbPost']))
    {
        $model->attributes=$_POST['TbPost'];

        $this->emailAll();

        if($model->save())
            $this->redirect(array('view','id'=>$model->id));
    }

    $this->render('create',array(
        'model'=>$model,
    ));
}



//email all Function

public function emailAll()
{
    //assuming that id is from the email table(unless email is under a members table)
    $sql = mysql_query("select email from tb_user");

    while ($row = mysql_fetch_assoc($sql)) {

        $to = $row['emailAdd'];
        $subject = 'NEW UPDATE FROM ADMIN';
        $message = 'HELLO TEST';
        $headers = 'From: WEBMASTER@b.com' . "\r\n";
        $headers .= 'BCC: ' . implode(', ', $to) . "\r\n";


        mail($to, $subject, $message, $headers);
    }
}

第一个函数“actionCreate”是yiis生成的函数,我添加了“$ this-> emailAll();”调用我创建的函数,以便在有新的创建时通过电子邮件发送给所有用户。

问题是,我知道sql不会工作,因为yii有自己的方式连接到数据库,我不知道我会怎么做。

2 个答案:

答案 0 :(得分:1)

以下是您要查找的文档部分:http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder#building-data-retrieval-queries

另外,一个建议。如果未将逻辑嵌入控制器中,将来测试逻辑通常会更容易。

可能值得将代码移出控制器。有几个地方你可以出来,但我建议创建一个CActiveRecordBehavior,观看afterSave事件,并在你的帖子模型保存后发送一封电子邮件(包括帖子的链接?)。

答案 1 :(得分:0)

在我的回复中,我假设你也有一个用户模型。如果不这样做,那么你应该创建一个。

您的查询可以像这样转换为Yii表单

$rsltAllmails = User::model()->findAll();

这应该是一个对象数组,每个对象代表一行查询结果。您可以按如下方式处理它们:

foreach ($rsltAllmails as $recEmail) {
   $to = $recEmail->emailAdd;
   // ...
   // ...and others ...
   // ...
}