#CakePHP でFixtureをbakeしたときenumフィールドでエラーが出たときの対応。

CakePHPでbakeでFixtureを作成したとき、モデルにenumのデータタイプがあると

Notice Error: Schema generation error: invalid column type enum(‘xxx’,’yyy’,’zzz’) for Model2.field does not exist in DBO in [C:\xxxxxx\lib\Cake\Model\CakeSchema., line 610]

のようにエラーが出て正常にFixtureが生成できなくなります。

対応としては、FixtureをBakeするときにレコードを作成させてしまいます。

Possible Models based on your current database:
1. Model1
2. Model2
3. Model3
4. Model4
5. Model5

Enter a number from the list above,
type in the name of another model, or ‘q’ to exit
[q] > 2
Would you like to import schema for this fixture? (y/n)
[n] >
Would you like to use record importing for this fixture? (y/n)
[n] >
Would you like to build this fixture with data from KeywordGroup’s table? (y/n)
[n] > y

ここにエラーがたくさん表示される。

Please provide a SQL fragment to use as conditions
Example: WHERE 1=1
[WHERE 1=1] >
How many records do you want to import?
[10] >

できあがったFixtureにはenumのフィールドに関しての$fieldsが抜けているので、Stringとして追加してしまいます。

public $fields = array(
:
:
‘field’ => array(‘type’ => ‘string’, ‘null’ => false, ‘default’ => null, ‘length’ => 50, ‘collate’ => ‘utf8_general_ci’, ‘charset’ => ‘utf8’),
:
);

$recordsには、本番DBから適当にデータが追加されているはずです。この$recordsのデータがテストデータとしてinsertされます。

適当ですが、これでテストできました。