【问题标题】:yii2 confirm and/or choice in the middle of transctionyii2 在交易过程中确认和/或选择
【发布时间】:2016-02-04 20:45:54
【问题描述】:

在上传文件的帮助下,我正在批量创建许多不同的相关模型。有没有办法让整个过程像与用户的对话,但将其保持在 try-catch 事务环境中?我的意思是,例如在过程的中间有一个点,当有两种可能性可供选择时,用户可以选择一种,或者“你确定要这样做吗?”等等,然后这个过程会更进一步?

【问题讨论】:

  • 你介意分享更多关于你的主要任务的细节吗?我的意思是“在上传文件的帮助下,我正在批量创建许多不同的相关模型”的更多背景知识。谢谢!
  • 我真的不知道如何才能更好地解释它。我的意思是我说的。我正在上传文件,并从中提取信息,然后手动将这些信息分配给模型属性。我知道这不是真正的 yii 方式,但我必须这样做。我们有关于酒店和访客的文本文件或 csvs。用户正在加载这个 csv/文本,函数提取它为酒店创建一个模型,分配所有必要的属性、验证、保存,然后在 for-each 循环中为访客提供模型。又比如,国籍还没有在数据库中,
  • 或者属性(文本)没有明确定义,可以选择两种可能。仅仅因为这样一个“小”问题而回滚整个事务简直是尴尬的。而且我想知道是否有可能在交易过程中显示一个用户可以选择的表单。
  • 啊,现在我明白了...我不确定您是在批量创建模型还是模型实例;)!
  • 是的,对不起,模型实例! :)

标签: transactions yii2 confirm


【解决方案1】:

我能想到的最简单的方法如下。

Import-Table 作为中间存储

  1. 导入时将文件读取到“导入”表中。 csv 或文本文件的每一行都有一条记录。保存读取的整行。
  2. 在保存之前,断言之前没有保存相同的行(唯一索引?)
  3. 然后在另一个控制器操作中,该操作在上传后调用此表中的所有条目。处理数据并立即保存或在必要时询问用户。
  4. 从导入表中删除该行或将其标记为已导入。后者的优点是您可以跟踪已导入的行,但需要在一定间隔后进行一些清理以防止数据膨胀。
  5. 完成!

表结构

作为一个例子...这里是您可以用于 MySQL 的 create 语句:

CREATE TABLE `import` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `is_imported` tinyint(1) NOT NULL DEFAULT '0',
    `data` text COLLATE utf8_unicode_ci NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

【讨论】:

    【解决方案2】:

    我认为这更容易,我将这样做,我将把所有数据发送到一个新表单(有其他可能的属性可供选择),用户可以在其中选择一个或多个额外的无问题地运行事务所需的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2015-02-25
      • 2011-12-18
      • 1970-01-01
      • 2016-06-07
      • 2013-10-21
      相关资源
      最近更新 更多