【问题标题】:CakePHP: Error trying to generate a schemaCakePHP:尝试生成模式时出错
【发布时间】:2013-11-05 16:55:57
【问题描述】:

我正在尝试开始使用 CakePHP 架构:app/Console/cake schema generate

我收到以下错误:

Welcome to CakePHP v2.3.0 Console
---------------------------------------------------------------
App : app
Path: /Applications/MAMP/htdocs/mysite/app/
---------------------------------------------------------------
Cake Schema Shell
---------------------------------------------------------------
Error: Database connection "Mysql" is missing, or could not be created.

这很令人困惑,因为站点运行良好,因此 Config/database.php 中的数据库凭据是正确的。

更新: 因为我使用的是 MAMP,所以我在 $defualt 数组中的 Config/database.php 中添加了以下内容:

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

现在我没有得到原来的错误,而是一些新的错误:

Welcome to CakePHP v2.3.0 Console
---------------------------------------------------------------
App : app
Path: /Applications/MAMP/htdocs/mysite/app/
---------------------------------------------------------------
Cake Schema Shell
---------------------------------------------------------------
Generating Schema...
Notice Error: Schema generation error: invalid column type enum('normal','unlimited_time','admin','extra_time') for Attempt.type does not exist in DBO in [/Applications/MAMP/htdocs/mysite/lib/Cake/Model/CakeSchema.php, line 616]

Notice Error: Schema generation error: invalid column type enum('in_progress','complete','canceled') for Attempt.status does not exist in DBO in [/Applications/MAMP/htdocs/mysite/lib/Cake/Model/CakeSchema.php, line 616]

Notice Error: Schema generation error: invalid column type enum('MC','FI','CS','CQ','TF') for AttemptedQuestion.type does not exist in DBO in [/Applications/MAMP/htdocs/mysite/lib/Cake/Model/CakeSchema.php, line 616]

Notice Error: Schema generation error: invalid column type enum('1','2','3') for Category.category_order does not exist in DBO in [/Applications/MAMP/htdocs/mysite/lib/Cake/Model/CakeSchema.php, line 616]

Error: Table choices for model Choice was not found in datasource default.
#0 /Applications/MAMP/htdocs/mysite/lib/Cake/Model/Model.php(3217): Model->setSource('choices')
#1 /Applications/MAMP/htdocs/mysite/lib/Cake/Model/CakeSchema.php(260): Model->getDataSource()
#2 /Applications/MAMP/htdocs/mysite/lib/Cake/Console/Command/SchemaShell.php(149): CakeSchema->read(Array)
#3 /Applications/MAMP/htdocs/mysite/lib/Cake/Console/Shell.php(388): SchemaShell->generate()
#4 /Applications/MAMP/htdocs/mysite/lib/Cake/Console/ShellDispatcher.php(199): Shell->runCommand('generate', Array)
#5 /Applications/MAMP/htdocs/mysite/lib/Cake/Console/ShellDispatcher.php(67): ShellDispatcher->dispatch()
#6 /Applications/MAMP/htdocs/mysite/app/Console/cake.php(33): ShellDispatcher::run(Array)
#7 {main}

看起来 CakePHP 对 ENUM 字段感到害怕。

【问题讨论】:

  • @AD7six 请看看上面的更新。
  • 枚举不是受支持的字段类型,因为它是 mysql 特定的。
  • 所以我是任何控制台/蛋糕程序的 S.O.L?
  • 请注意,您的新问题与原始问题无关。不一定,但因为模式 shell 将询问模式,并找到不支持的东西 - 那个 shell 会发现问题。枚举问题不是特定于 cli 的,您会在使用应用程序时发现其他问题。一般来说,您可以解决枚举问题。例如,您可以在模型中定义模式并说它是一个 char 字段。

标签: php mysql cakephp cakephp-2.0


【解决方案1】:

正如这里非常明确地描述的那样......

Cakephp + enum support : unable to save or select enum 0 and 1

...CakePHP 不喜欢 ENUM 字段。看起来与架构相关的控制台工具将在那里与它们一起使用。

【讨论】:

  • "无" =)?为什么一个模型的架构会影响例如 - 烘焙脚本(除非它加载该模型请求架构)或测试套件等。
  • 对其进行了修改以澄清。
【解决方案2】:

老问题,我知道。但是我昨天刚刚解决了这个问题,同时还在我的一个非常古老的项目中工作。

如果你仍然需要这种解决方案,我在这个 git public 存储库上发布了。

https://github.com/matheuscmpm/cakephp-schema-enum

您基本上需要更改 Datasource/Database/Mysql.php 文件以将 ENUM 作为可接受的类型插入,然后他们更改 Model/CakeSchema.php 来处理它们。

如果您不想更改您的 cakephp 2.x 文件,您可以将它们复制到您的项目应用文件夹中,就像我做的那样。在这个 README.md 文件中,您可以看到我在这两个文件中所做的确切更改,您也可以复制相同的解决方案来处理 SET 类型字段。

我刚刚这样做是为了使用 MySQL,因此您需要另一个数据库,您还需要更改其他数据源/数据库文件中的一些内容。

干杯。

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多