CakePHP:尝试生成架构时出错

CakePHP:尝试生成架构时出错,php,mysql,cakephp,cakephp-2.0,Php,Mysql,Cakephp,Cakephp 2.0,我正在尝试开始使用CakePHP模式:app/Console/cake模式generate 我得到以下错误: Welcome to CakePHP v2.3.0 Console --------------------------------------------------------------- App : app Path: /Applications/MAMP/htdocs/mysite/app/ -------------------------------------------

我正在尝试开始使用CakePHP模式:
app/Console/cake模式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中的DB凭据是正确的

更新: 因为我使用的是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字段非常感兴趣。

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


…CakePHP不喜欢枚举字段。看起来与模式相关的控制台工具将在那里使用。

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

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

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

如果您不想更改cakephp 2.x文件,可以将它们复制到project app文件夹,就像我所做的那样。在这个README.md文件中,您可以看到我在这两个文件中到底更改了什么,您也可以复制相同的解决方案来处理集合类型字段

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


干杯。

@AD7six请看一下上面的更新。Enum不是受支持的字段类型,因为它是特定于mysql的。所以我是任何控制台/蛋糕程序的s.O.L?请注意,您的新问题与原始问题无关。不一定,但由于模式shell将询问模式,并发现不受支持的内容,因此该shell将发现问题。枚举的问题不是特定于cli的,在使用应用程序时,您会发现其他问题。一般来说,您可以解决枚举问题。e、 g您可以在模型中定义模式,并说它是一个char字段。“none”=)?例如,为什么一个模型的模式会影响烘焙脚本(除非它加载该模型并请求模式),或者测试套件,等等。对其进行修改以澄清。