Php 数据未保存到数据库yii2中

Php 数据未保存到数据库yii2中,php,yii2,yii2-basic-app,yii2-model,Php,Yii2,Yii2 Basic App,Yii2 Model,我正在尝试将一些数据插入我的一个表中。但我无法拯救它 public static function setupEmail($ref_no,$customer_id,$install_id) { $sql = "SELECT DISTINCT es.`id` AS 'setup_id',es.`user_id` AS 'user_id',u.`email` AS 'email', es.`circle_code` AS 'circle_code', es.`circle_name` AS

我正在尝试将一些数据插入我的一个表中。但我无法拯救它

public static function setupEmail($ref_no,$customer_id,$install_id)
{
    $sql = "SELECT DISTINCT es.`id` AS 'setup_id',es.`user_id` AS 'user_id',u.`email` AS 'email', es.`circle_code` AS 'circle_code',
es.`circle_name` AS 'circle_name',es.`email_group` AS 'email_group',ins.`meter_msn` AS 'msn', ins.`istallation_status` AS 'install_stat'
,ins.`comm_status` AS 'comm_stat'
FROM `email_setup` es
INNER JOIN `survey_hesco_subdivision` sd ON es.`circle_code` = sd.`circle_code`
INNER JOIN `survey` sur ON sd.`sub_div_code` = sur.`sub_division`
INNER JOIN `user` u ON es.`user_id` = u.`id` 
INNER JOIN `installations` ins ON sur.`customer_id` = ins.`customer_id`
WHERE sur.`customer_id` = '$customer_id'";

    $result = Yii::$app->db->createCommand($sql)->queryAll();

    foreach ($result as $result_set)
    {
       $email_setup_id = $result_set['setup_id'];
       $msn = $result_set['msn'];
       $email_to = $result_set['email'];
       $install_status = $result_set['install_stat'];
       $communication_stat = $result_set['comm_stat'];

       $m = new EmailTransaction;
       $m -> load(Yii::$app->request->post());
       $m->email_setup_id = $email_setup_id;
       $m->install_id = $install_id;
       $m->ref_no = $ref_no;
       $m->meter_msn = $msn;
       $m->email_to = $email_to;
       $m->email_datetime = date('Y-m-d H:i:s');
        try{
            if($m->save())
            {
                Yii::$app->mailer->compose()
                    ->setFrom(['xxx@xx.com'=>'Inventory Admin'])
                    ->setTo($email_to)
                    ->setSubject('New Installation')
                    ->setTextBody('The Meter# '.$msn.' against Reference# '.$ref_no.' is '.$communication_stat.' and '.$install_status)
                    ->setHtmlBody('<b>HTML content</b>')
                    ->send();
            }
        }
        catch (Exception $ex)
        {
            return ['status' => 'ERROR', 'message' => $ex->getMessage()];
        }

    }


}
更新1

作为快速更新,我尝试了
print\r(Yii::$app->request->post())
print\r($m->getErrors())
。两者都给我和空数组
array()

更新2

我的表定义如下

更新3

运行此
后,显示创建表电子邮件\u事务
。下面是我得到的

全文如下:

CREATE TABLE `email_transaction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email_setup_id` int(11) DEFAULT NULL,
`install_id` int(11) DEFAULT NULL,
`meter_msn` varchar(200) DEFAULT NULL,
`ref_no` varchar(50) DEFAULT NULL,
`email_datetime` datetime DEFAULT NULL,
`email_to` varchar(200) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `FK_REF_NO` (`ref_no`),
 KEY `FK_METER_MSN` (`meter_msn`),
 KEY `FK_INS_ID` (`install_id`),
 CONSTRAINT `FK_INS_ID` FOREIGN KEY (`install_id`) REFERENCES `installations` (`id`),
 CONSTRAINT `FK_METER_MSN` FOREIGN KEY (`meter_msn`) REFERENCES `meters` (`meter_msn`),
 CONSTRAINT `FK_REF_NO` FOREIGN KEY (`ref_no`) REFERENCES `ref_numbers` (`ref_no`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
更新3

根据建议,我做了以下工作

 try {
            if ($m->save(false)) {
                Yii::$app->mailer->compose()
                    ->setFrom(['faisal.qayyum@accurate.com.pk' => 'Inventory Admin'])
                    ->setTo($email_to)
                    ->setSubject('New Installation')
                    ->setTextBody('Salam')
                    ->setHtmlBody('The Meter# ' . $msn . ' against Reference# ' . $ref_no . ' is ' . $communication_stat . ' and ' . $install_status)
                    ->send();
            } else {
                //throw new \Exception('error');;
                echo "No Email Sent";
            }
        }catch(Exception $ex)
        {
            print_r($m->attributes); return;
        }
输出是

Array
(
[id] => 
[email_setup_id] => 1
[install_id] => 1
[meter_msn] => 002999000071
[ref_no] => 20371110314300U
[email_datetime] => 2018-02-09 07:00:18
[email_to] => aaa.aa@aa.com
)

任何帮助都将不胜感激。

因此,我能够解决我的问题。我所做的事情如下

分配给我的表列
email\u transaction
外键
来自不同的表,因此首先,我删除了所有
FK的
,然后再次从同一个表中添加它们。此外,我已将所有
FK
字段设置为
notnull

在服务器端,我删除了模型并再次重新生成它。已插入所有记录,并且这些记录已成功插入

 foreach ($result as $result_set) {
        $email_setup_id = $result_set['setup_id'];
        $msn = $result_set['msn'];
        $email_to = $result_set['email'];
        $install_status = $result_set['install_stat'];
        $communication_stat = $result_set['comm_stat'];

        $m = new EmailTransaction;
        $m->load(Yii::$app->request->post());
        $m->email_setup_id = $email_setup_id;
        $m->install_id = $install_id;
        $m->ref_no = $ref_no;
        $m->meter_msn = $msn;
        $m->email_to = $email_to;
        $m->email_datetime = date('Y-m-d H:i:s');

        try {
            if ($m->save()) {
                Yii::$app->mailer->compose()
                    ->setFrom(['sender_email' => 'Inventory Admin'])
                    ->setTo($email_to)
                    ->setCc("cc_email")
                    ->setSubject('New Installation')
                    ->setTextBody('hi')
                    ->setHtmlBody('The Meter# <b> '  . $msn . '</b>'. ' against Reference# <b> ' . $ref_no . '</b>'.' is <b> ' . $communication_stat . '</b>'. ' and <b> ' . $install_status)
                    ->send();
                echo "email sent";
            } else {
                //throw new \Exception('error');;
                echo "No Email Sent";
            }
        }catch(Exception $ex)
        {
            print_r($m->attributes); return;
        }


    }
foreach($result作为$result\u集){
$email_setup_id=$result_set['setup_id'];
$msn=$result_set['msn'];
$email_to=$result_set['email'];
$install_status=$result_set['install_stat'];
$communication_stat=$result_set['comm_stat'];
$m=新的电子邮件交易;
$m->load(Yii::$app->request->post());
$m->email\u setup\u id=$email\u setup\u id;
$m->install\u id=$install\u id;
$m->ref\u no=$ref\u no;
$m->meter\u msn=$msn;
$m->email\u to=$email\u to;
$m->email_datetime=date('Y-m-d H:i:s');
试一试{
如果($m->save()){
Yii::$app->mailer->compose()
->setFrom(['sender\u email'=>'Inventory Admin']))
->setTo($email\u to)
->setCc(“抄送电子邮件”)
->setSubject(“新安装”)
->setTextBody('hi')
->setHtmlBody('Meter#'.$msn.''ref#'.$ref#no.'.'是'.$communication#'.''和'.$install#状态)
->send();
回显“已发送电子邮件”;
}否则{
//抛出新\异常('error');;
回显“未发送电子邮件”;
}
}捕获(例外$ex)
{
打印($m->属性);返回;
}
}

它确实对我有用。希望它能帮助一些人

您正在
try catch
块中添加记录,而不启动
事务
块,尽管它仍然可以工作,加上
$m->save()
不会抛出异常它返回
true
false并将错误填充到属性中如果你想捕获异常,你需要在
if($m->save())
else
部分中抛出异常,
如果($m->save())
打印的目的是什么(Yii:$app->request->post())没有发布任何内容,它将是空的ofcourse@MuhammadOmerAslam删除
try catch后确定
我已经完成了这个
$m->save(false)
并且它给了我以下错误
SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败
由于缺少
主键
或已添加的
唯一
键,您添加的约束不允许您添加记录,你能给我看看桌子吗definition@MuhammadOmerAslam是的,请检查更新的问题
 foreach ($result as $result_set) {
        $email_setup_id = $result_set['setup_id'];
        $msn = $result_set['msn'];
        $email_to = $result_set['email'];
        $install_status = $result_set['install_stat'];
        $communication_stat = $result_set['comm_stat'];

        $m = new EmailTransaction;
        $m->load(Yii::$app->request->post());
        $m->email_setup_id = $email_setup_id;
        $m->install_id = $install_id;
        $m->ref_no = $ref_no;
        $m->meter_msn = $msn;
        $m->email_to = $email_to;
        $m->email_datetime = date('Y-m-d H:i:s');

        try {
            if ($m->save()) {
                Yii::$app->mailer->compose()
                    ->setFrom(['sender_email' => 'Inventory Admin'])
                    ->setTo($email_to)
                    ->setCc("cc_email")
                    ->setSubject('New Installation')
                    ->setTextBody('hi')
                    ->setHtmlBody('The Meter# <b> '  . $msn . '</b>'. ' against Reference# <b> ' . $ref_no . '</b>'.' is <b> ' . $communication_stat . '</b>'. ' and <b> ' . $install_status)
                    ->send();
                echo "email sent";
            } else {
                //throw new \Exception('error');;
                echo "No Email Sent";
            }
        }catch(Exception $ex)
        {
            print_r($m->attributes); return;
        }


    }