【问题标题】:CakePHP 3 - Save function not generating primary key for databaseCakePHP 3 - 保存函数不为数据库生成主键
【发布时间】:2015-12-29 22:00:29
【问题描述】:

我有一个正在使用 Cake 3 开发的应用程序,我已经烘焙了很多东西来了解这块土地,因为我是 Cake 新手。

当转到我的一个模型的烘焙添加视图,填写表格并提交时,条目被添加到数据库中,但条目上的主键是空白的。我一直在做一些研究,在 Cake 的表类中,我知道它应该在保存方法期间创建。但是,我没有覆盖 save 或类似的东西,所以我有点困惑为什么它没有为主键生成 ID 字段。

我希望有人能够为我指明正确的方向,采取一些可能有助于我调试的步骤。谢谢!

【问题讨论】:

  • 你的 MySQL 表中的 id 字段是什么类型的?
  • @InigoFlores 这是一个 varchar(36),会不会影响它?
  • 请发布添加视图的代码。
  • @InigoFlores 数据库是从运行 CakePHP 1.3 的应用程序版本中预先存在的,所以我相当肯定架构是好的。当我烘烤我的 MVC 几页时,我没有改变任何东西。添加视图只是后面的样板代码。
  • 您的表单是否包含echo $this->Form->input('id')?它是否呈现为文本输入字段?

标签: cakephp-3.0 cakephp-3.x


【解决方案1】:

来自Cookbook 3.x

除了使用自增键作为主键,您还可以使用char(36)。然后,每当您使用 Table::save() 方法保存新记录时,CakePHP 将使用唯一的 36 字符 UUID (Text::uuid)。

尝试将您的 MySQL 表中的 id 字段从

VARCHAR(36)

CHAR(36)

【讨论】:

  • 试一试,文档很有意义,但没有运气。我猜那么问题一定与字段的类型无关
  • @MasonDixonLine 删除/app/tmp/cache/models 的内容并再次尝试保存。
  • 清空缓存后没有运气。
  • @MasonDixonLine 看看你能不能把表格的代码贴出来
  • 嗨,Inigo,我提前道歉,但您的回答实际上是正确的。我的一个表上的 ID 在其他 3 个表上被引用(外键可能是正确的术语?抱歉,我对数据库术语比较陌生),我也忘记将它们设为 char 而不是 varchar。我相信一切都是固定的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多