【问题标题】:Concrete 5 ADODB update and insert duplicate primary key具体5 ADODB更新和插入重复主键
【发布时间】:2012-09-10 07:59:03
【问题描述】:

我正在为 Concrete 5 (5.4.0+) 创建一个新包。插入一个新块效果很好。但是当我编辑现有块时,它会在我单击“保存”时再次尝试插入,而不是更新。

数据库中影响这一点的两个字段是 bID 和 eID。两者都是non-auto-incrementing INT(10) default none NOT NULL

值在控制器中的关联数组$args 中传递,我使用Parent::save($args); 调用父保存方法

任何帮助/输入将不胜感激。 PS:我在网上查看了这个,C5论坛确实出现了一些我尝试过的东西,主要与数据库字段有关,但我仍然得到上述错误。如果可能,我不想覆盖 ADODB save() 方法。

--- 编辑 ---

也许我看错了。让我说一下我正在努力实现的目标。我需要 eID 在块的多次编辑中保持 37(例如)。出价可以增加 AFAIC。

如何让 eID 在编辑时保持 37,但在创建新实例时增加 1?有意义吗?

第二个表引用 eID 字段,并且该表上条目的已编辑实例必须具有相同的 eID,除非创建新实例。 Sry - 我知道像泥巴一样清晰。

【问题讨论】:

    标签: insert duplicates adodb concrete5


    【解决方案1】:

    您是说您的页面上出现了一个新的块实例,而不是现有块的新版本?我认为问题不在于表中插入了新记录,因为通常在编辑块时会创建新记录。 C5 保留旧版本的块。

    我所做的自定义块从未需要调用父保存方法。您只需要一个编辑表单,它收集数据并指定它对应的数据库字段,并且父控制器知道在提交表单时如何处理它。

    例如,如果您正在更新块表中有一个名为“firstname”的文本字段,您可以在 edit.php 文件中添加一行,如下所示:

    <?php echo $form->text('firstname', $firstname, array('style' => 'width: 320px'));?>
    

    我的块编辑器几乎没有其他内容,除了 html/CSS 的东西来添加标签和使表单看起来更好。 $form 对象负责处理其他所有事情。

    真正帮助我理解积木和积木控制器的一件事是下载并安装“设计器内容”插件。免费。您可以使用它来构建一些自定义块,然后查看它生成的代码以执行各种功能。

    【讨论】:

    • 是的,好点。我知道 C5 在 save 上创建了新的块实例,但是我需要 eID 字段从一个编辑到另一个编辑保持一致,除非创建一个新实例,在这种情况下,eID 应该增加 1,有意义吗?不过,您的观点很好-也许我从错误的角度看待这个问题:(
    • 您是否使用它来识别您的块类型的每个实例?如果是这样,那么我认为在大多数情况下,您可能会尝试进行比您真正需要的更精细的控制。
    • 所以我有 2 个表,btBirthdayPartybtBirthdayPartyGoers。有问题的eID 字段位于btBirthdayParty。注册参加的人进入btBirthdayPartyGoers 表,其中有一个 eID 字段将他们链接到他们正在参加的聚会。如果我编辑 btBirthdayParty 块实例,我无法在保存时增加 eID,因为我们将失去与派对参与者的关联。但是,当我创建一个新派对时,我需要一个新的 eID,这样每个人就不会去同一个派对......
    • 我想我可以在表单上放一个字段来询问这是一个新实例还是一个实例的编辑?讨厌但有效。
    • 啊,好吧,你有多个表。我建议看一下处理多个表之间的引用完整性的核心块之一,看看那里使用了什么方法。表单块是一个(/concrete/blocks/form/*.*)。
    【解决方案2】:

    所以我查看了现有的包来复制这种功能,我的问题已经演变成这样:PHP Concrete 5 Pass Variables to Add.php

    跟着兔子;)

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 2012-04-21
      • 2021-03-28
      • 2014-02-04
      • 1970-01-01
      • 2011-02-12
      • 2020-07-21
      • 2023-03-19
      相关资源
      最近更新 更多