I have Just migrated from Yii 1.1.5 to Yii 1.1.6 and hit a snag while testing it. Where do I need to run the command from ? This has not been explained in the documentation. My guess was to run it in the application folder but running
yiic migrate create create_test_table
gave me the following error
Error: The migration directory does not exist: application.migrationskevin@kruschev:/development/projects/authentication$
I have tried to create the protected/migrations directory manually but the same error still persists.
I’m very new to Yii and was working this problem last night. I love migrations in Rails and they’ll be great for Yii.
In MigrateCommand.php, Yii passes $migrationPath which equals ‘application.migrations’ to Yii::getPathOfAlias and it returns “path to YiiRoot\framework\cli\migrations”. When you create a migrations directory in the Cli folder migrations do work.
I don’t know how to get them to be created in your project’s protected folder, but that would be preferable.
Just use yiic from your application directory, not from framework directory. Framework one should be used only to generate application and some other utility tasks.
I am running yiic from my application directory, not from the framework directory. Yii wants to create the migrations in framework/cli rather than application/protected
It works fine with new projects created with yii 1.1.6, but not projects that I upgraded from 1.1.5 and converted to 1.1.6. I’ll have to figure out where I messed the upgrade.
If you upgrade you’ll have to create protected/migrations as this is the folder where migrations are stored. Yii will not create this automatically (only if you create a new 1.1.6 app).
Please check what is returned Yii::getPathOfAlias(‘application’) in your console application. If it is different from something like ‘protected’, you need to check if you set ‘basePath’ configuration in your console app’s config (it should be there if you create your yii app using yiic webapp command).
When I run Yiic from the framework folder, Yii::getPathofAlias(‘application’) returns “path to framework”/cli/migrations
When I run it from the protected folder it returns "protected/migrations".
When I installed Yii 1.1.5, I added the framework folder to my path so I didn’t have to type the location of yiic all the time. This seemed to work with 1.1.5. When you run migrations from 1.1.6, you must run the yiic from the protected directory in your application tree for migrations to work. The one in the framework folder writes the migrations in cli/migrations.
the protected/config/console.php has set to ‘basePath’=>dirname(FILE).DIRECTORY_SEPARATOR.’…’,
I just started to teach myself Yii Saturday evening so I’m a huge noob. Coming from Rails I was very happy to see 1.1.6 with migration support released on Sunday. I’m hardly an expert on this.
Thank you, I figured that out. I don’t think 1.1.6 is created the protected/migrations folder. I had to create it manually with new projects started with 1.1.6
Thanks guys for your support. I have seen where I had it wrong. I had added the
/yii-1.1.6/framework
directory to PATH environment variable so as to use the yiic command line tool globally.
I did a probe and noticed that there exists another yiic executable in
application/protected
directory. What was happening before was that every time I called the command then the one in /yii-1.1.6/framework/ was called hence the path related issues. I guess it would be handy if the tutorial could be updated to explicitly explain where to run the command from for the the sake of future readers.
This is exactly what I did too. All other yiic commands seem to work from the framework and can be run from the application root, but migrations require you to run them from the protected folder below the application root.
Should the yiic migrate command create the migrations folder if it’s does not exist?
Also, anybody else notice that the migration template is missing the php close tag at the end of the file?
I’d also recommend that the comment lines around the down function be removed. For proper migrations, the down function is equally as important as the up function. Commenting out the down function in the template implies that it is not important.