资讯专栏INFORMATION COLUMN

Yii2多模型与事务的用法

rubyshen / 3207人阅读

摘要:目的分析通过实战,分享多模型与事务的简单用法。多模型验证数据全部通过后才能保存数据,否则保存失败事务保存数据遇到异常会把原来已保存的数据撤销。多模型表与表之间无联系,事务表与表之间要有联系。相关资料多模型的复合表单事务事务什么情况使用

前言

Yii2的多模型与事务平时用的也挺多的,但是网上现有的资源不多,为此我觉得有必要做个总结与分享,雷锋同志的一贯作风,不做解释。在利用大伙喝咖啡的时间我亲自下海实战了,实践出真知,不耍嘴皮子,拿经验说事。OK,Stop,要是不感兴趣的呢可以不看了,要是感兴趣的呢可以继续往下看,绝对让你收获颇丰哈哈。

目的分析

通过实战,分享Yii2多模型与事务的简单用法。

多模型

1、controller部分

</>复制代码

  1. public function actionCreate()
  2. {
  3. $model = new OpportunityType();
  4. $_model=new User();
  5. $post=Yii::$app->request->post();
  6. if(isset($post["User"]) && isset($post["OpportunityType"]))
  7. {
  8. $model->attributes=$post["OpportunityType"];
  9. $_model->attributes=$post["User"];
  10. if($model->validate() && $_model->validate())//这里是先验证数据,如果通过再save()。
  11. {
  12. $model->save(false); //保存不验证(前面已经验证了,所以此处可以设为false)
  13. $_model->save(false);
  14. return $this->redirect(["view", "id" => $model->id]);
  15. }else {
  16. return $this->render("create", [
  17. "model" => $model,
  18. "_model"=>$_model,
  19. ]);
  20. }
  21. } else {
  22. return $this->render("create", [
  23. "model" => $model,
  24. "_model"=>$_model,
  25. ]);
  26. }
  27. }

2、view部分

</>复制代码

  1. "sales-form",
  2. "enableAjaxValidation" => true,
  3. "enableClientValidation" => true,
  4. ]);
  5. ?>
  6. field($model, "jhlx")->textInput(["maxlength" => true]) ?>
  7. field($model, "company_id")->textInput(["maxlength" => true]) ?>
  8. field($model, "sort")->textInput() ?>
  9. field($_model, "username")->textInput(["maxlength" => true]) ?>
  10. isNewRecord ? Yii::t("app", "Create") : Yii::t("app", "Update"), ["class" => $model->isNewRecord ? "btn btn-success" : "btn btn-primary"]) ?>

注:此部分是多模型的使用,当OpportunityType和User两个验证通过之后才能保存数据。

事务

1、controller部分

</>复制代码

  1. public function actionCreate()
  2. {
  3. $model = new OpportunityType();
  4. $_model=new User();
  5. $post=Yii::$app->request->post();
  6. if(isset($post["User"]) && isset($post["OpportunityType"]))
  7. {
  8. $db = Yii::$app->db;
  9. $transaction = $db->beginTransaction(); //开启事务
  10. try {
  11. $model->attributes=$post["OpportunityType"];
  12. $_model->attributes=$post["User"];
  13. if($_model->save())//这里是先验证数据,如果通过再save()。
  14. {
  15. $model->user_id=$_model->id;
  16. if(!$model->save()){
  17. $error=array_values($model->getFirstErrors())[0];
  18. throw new Exception($error);//抛出异常
  19. }
  20. }else{
  21. $error=array_values($_model->getFirstErrors())[0];
  22. throw new Exception($error);//抛出异常
  23. }
  24. // 提交记录(执行事务)
  25. $transaction->commit();
  26. return $this->redirect(["view", "id" => $model->id]);
  27. } catch (Exception $e) {
  28. // 记录回滚(事务回滚)
  29. $transaction->rollBack();
  30. Yii::$app->session->setFlash("error",$e->getMessage());
  31. return $this->render("create", [
  32. "model" => $model,
  33. "_model"=>$_model,
  34. ]);
  35. }
  36. } else {
  37. return $this->render("create", [
  38. "model" => $model,
  39. "_model"=>$_model,
  40. ]);
  41. }
  42. }

注:要想事务回滚,必须抛出异常。
2、view部分还是和多模型的一样,此处省略。

总结分析

1、多模型与model有联系,事务与数据库有联系。
2、多模型model验证数据全部通过后才能保存数据,否则保存失败;事务保存数据遇到异常会把原来已保存的数据撤销。
3、多模型表与表之间无联系,事务表与表之间要有联系。

附加

isset与empty的区别
1、isset($var)判断变量是否设置,empty($var)判断变量是否为空!
如$one已经定义没有值,isset($one)返回true,判断存在;empty($one)判断为空,判断存在,同样返回true。
如$one定义为null,isset($one)返回false;empty($one)返回true(重要区别)。
2、empty比isset范围更广,进一步说isset更为精确。

相关资料

多模型的复合表单
事务(Transaction)
Yii事务什么情况使用?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65068.html

相关文章

  • Yii2模型事务用法

    摘要:目的分析通过实战,分享多模型与事务的简单用法。多模型验证数据全部通过后才能保存数据,否则保存失败事务保存数据遇到异常会把原来已保存的数据撤销。多模型表与表之间无联系,事务表与表之间要有联系。相关资料多模型的复合表单事务事务什么情况使用 前言 Yii2的多模型与事务平时用的也挺多的,但是网上现有的资源不多,为此我觉得有必要做个总结与分享,雷锋同志的一贯作风,不做解释。在利用大伙喝咖啡的时...

    BigNerdCoding 评论0 收藏0
  • 基于Yii2应用开发引擎RageFrame

    摘要:多入口模式,多入口分为后台前端,微信,其他或接口对接,不同的业务不同的设备进入不同的入口。对接微信公众号,使用了一款优秀的微信非官方,系统内已集成了该,调用方式会在文档说明,也可直接看其文档进入深入开发。 RageFrame 为二次开发而生,让开发变得更简单。 前言 RageFrame项目创建于2016年4月16日,基于Yii2框架开发的应用开发引擎,目前正在成长中,目的是为了集成更多...

    enda 评论0 收藏0
  • Yii2中hasOne、hasMany以及关联查询用法

    摘要:前言是特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。需求分析使用一条查询语句就能把列表的数据全部展现出来,列表包含一对一,一对多,以及多对多的关系。不能破坏自有的表头排序功能,以及中的存值。相关资料中多表关联查询 前言 hasOne、hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。为什么?因为这种方式关联查询出来...

    qc1iu 评论0 收藏0
  • Yii2中hasOne、hasMany以及关联查询用法

    摘要:前言是特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。需求分析使用一条查询语句就能把列表的数据全部展现出来,列表包含一对一,一对多,以及多对多的关系。不能破坏自有的表头排序功能,以及中的存值。相关资料中多表关联查询 前言 hasOne、hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。为什么?因为这种方式关联查询出来...

    lmxdawn 评论0 收藏0

发表评论

0条评论

rubyshen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<