CakePHP:尝试生成架构时出错

时间:2013-11-05 16:55:57

标签: php mysql cakephp cakephp-2.0

我正在尝试使用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字段感到害怕。

2 个答案:

答案 0 :(得分:2)

正如这里所描述的那样明确......

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

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

答案 1 :(得分:2)

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

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

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

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

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

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

干杯。

相关问题