【问题标题】:CakePHP: How can I disable auto-increment on Model.id?CakePHP:如何禁用 Model.id 上的自动增量?
【发布时间】:2011-02-24 09:52:39
【问题描述】:

CakePHP 1.3.0,mysqli

我有一个模型,Manifest,其 ID 应该是打印表单中的唯一编号。但是,由于 Manifest.id 设置为主键,CakePHP 正在帮助我设置字段的自动增量。有没有办法通过 schema.php 和/或其他地方标记该字段以禁用自动增量?没有它,我只需要一个普通的旧主键。

我能想到的唯一其他解决方案是添加一个单独的清单编号字段并更改六个其他表中的外键。有点浪费,不够直观。

【问题讨论】:

  • 我也有兴趣听取解决方案。

标签: php cakephp model auto-increment cakephp-1.3


【解决方案1】:

我对此有点好奇。当然,如果没有设置主键(在您的情况下为 ID),您将无法保存记录。因此,如果您不希望 ID 自动递增,那么您必须保存自己的 ID。它不应该引起问题。

你用的是mysql数据库吗?如果是这样,您是否在 ID 字段上将 auto_increment 设置为 true?然后mysql本身会在你保存记录时自动增加ID,不是吗?

【讨论】:

    【解决方案2】:

    您应该能够在添加表单中包含 ID 字段。只需确保覆盖其默认类型,否则 CakePHP 会将其变为隐藏字段。

    echo $this->Form->input('id', array('type' => 'text'));
    

    【讨论】:

      【解决方案3】:

      我刚刚在我的蛋糕沙盒上对此进行了测试,它确实有效。

      您只需在要保存的数据中设置 id 字段即可。因此,如果您要保存帖子数据,并且希望 id 为 200(任意;您可以使用另一个表格字段或用户输入或其他任何内容作为此来源)。

      $this->data['Manifest']['id'] = 200;
      

      这就是你所追求的,能够为 id 设置自己的值而不是自动递增它们吗?

      【讨论】:

      • 除非我遗漏了一些东西,否则这不会起作用,因为 Cake 如何决定是插入还是更新。从手册中,3.7.4 保存数据:“创建或更新由模型的 id 字段控制。如果设置了 $Model->id,则更新具有此主键的记录。否则创建新记录。”我已经尝试过了,这确实是 Cake 的运作方式。但是,是的,我想设置我的 ID,而不是使用 MySQL 自动增量。如果可能的话,当从“cake schema create”创建数据库时,我还想阻止 Cake 在字段上强制自动增量(但保留“primary”)。
      • 我应该澄清一下:添加一个 new 用户生成的 ID 是可行的。尝试创建具有相同 ID 的新清单 更新 以前的。也许这是一个验证问题。尽管如此,isUnique 似乎并没有通过添加表单处理 ID 字段。
      • 对,这不是你想要的行为吗?为了能够在创建记录时设置清单 ID?然后您可以在编辑现有记录时以相同的方式设置它。至于自动生成的东西,我通常会避免这样做,所以我怕我不能和它说话。就不能写个ALTER TABLE语句去掉表中的自增属性吗?
      【解决方案4】:

      您可以在 Manifest 模型中设置您的架构:http://book.cakephp.org/view/442/_schema

      【讨论】:

      • 如何在自定义架构中禁用 AUTO_INCREMENT?
      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      相关资源
      最近更新 更多