During development, for testing purpose, I sometimes need the tables related to one of the model clear. For example, I may have a team model with testers, coders, managers, projects and offices models linked with foreign key. I would like to clear all of these tables to test my create team function.
Currently I do that by,
php artisan migrate:refresh --seed
It works, seeder adds back data I needed for the testing environment, but it also clears all other unrelated tables. Also, it drops and recreate table and therefore it is slow.
I know I can write a function for that, but it seems a bit overkill. Is there other artisan command for me to do this action?
All you need is this artisan command:
php artisan db:seed --class=TeamSeeder
where TeamSeeder is the name of the seeder class which you have created to seed a specific table.
Make sure you truncate the table in that seeder class, before seeding.
This command will not recreate the table and which is not even required in your case.
Hope this will help.
Related
I am new to Laravel and I'm confused if it is possible to create a multiple migration table in Laravel in just one run?
Like:
php artisan make:migration user_acc_tbl --create=user_acc_tbl, user_info_tbl --create=user_info_tbl, skills_tbl --create=skills_tbl
I hope it is possible. So that we can just run the command once from the command terminal to create multiple migration files. It would be really helpful though.
According to the Laravel documentation, it is not possible to make multiple migrations in one command line. You may be able to write a custom artisan console command and do it that way, however I really don't see how it would save that much time.
What you could do is create multiple tables from one migration file. Just use Schema::create and create the proper tables with the necessary columns.
You could also create aliases to help speed up workflow in the terminal.
I'm a total newbie following the guestbook tutorial at laravelbook.com, via Koding.com.
In my project directory, running php artisan migrate:make create_entries_table (also tried with --create=entries appended) produces the following response:
Generated migration: blah_blah_blah_create_entries_table
Compiling common classes
Compiling views
That's it. No migration table or file is created. Any idea as to why this is happening? I already asked on the L forum yesterday, nobody's responded :( Would really appreciate some insight on this...
UPDATE:
Very odd. I ran migrate:reset, and it said Nothing to rollback. But now two migration files are there, from yesterday (one with schema blueprint, one just with blank up & down functions)! No rows in migrations table though.
Other than the migration files not appearing, this is expected behaviour. The migrate:make command only creates the migration file in which you will specify what database actions Laravel is supposed to trigger when migrating (up) or rolling back (down). By default that file will contain a class (which is named by studly-casing the migration name) which up and down methods, nothing more. You might want to use Laravel's Schema class, as per usual, or you might want to do raw queries using the DB class, but you're actually free to put whatever code you want to automate in there (I sometimes run artisan commands in my migrations). Since no error is triggered, I'm assuming Laravel has permission to create files in your database/migrations folder, so it might just be that your app is not refreshing the files view afterwards?
Anyway, in order to actually run the migrations, which will create the migrations table in your database if there isn't one already, is just php artisan migrate. To rollback the last batch of migrations you can use php artisan migrate:rollback and to rollback all batches you use php artisan migrate:reset, but either command is useless if no migration table yet exists, which appeared to be your case.
I just had a thought of serving fresh data for a demo app.
What I want to achieve is to have the schema and a set of data prepared beforehand and got ready to be migrated as the demo app is run. Simply put, every time a user runs the app, the database will be dumped with fresh data.
Is that possible? In Laravel 4, I know when I generate a migration script through the CLI, it seems like it has a timestamps attached to the file name, I was wondering if that would prevent the migration from being executed in later days in the future?
Thanks everyone.
What I want to achieve is to have the schema and a set of data prepared beforehand and got ready to be migrated as the demo app is run. Simply put, every time a user runs the app, the database will be dumped with fresh data.
Speaking of having a set of prepared data, I think Database Seeding is close to what you want.
The docs also mention how you could use the migration and seeding together. Although you'll need to decide how to do the migration + seed yourself. E.g. trigger by artisan command, trigger every page load, etc.
Rollback all migrations and run them all again (reference):
php artisan migrate:refresh
php artisan migrate:refresh --seed
You could also use packages like fzaninotto/Faker to help with generating a closer-to-real-life seed data for you.
In Laravel 4, I know when I generate a migration script through the CLI, it seems like it has a timestamps attached to the file name, I was wondering if that would prevent the migration from being executed in later days in the future?
The timestamp in the migration file name is only used for indicating the order in which the migration should be run. So you don't end up running migrations where you try to add a column before adding its table. As long as you do php artisan migrate:refresh and you have set up the up() and down() in your migration files correctly, it should not be a problem.
Although note that if you are in a team, be sure to check the migration order since two or more members can create migration files in parallel to each other.
I am using version control for my project. After some updates and commit when I run my project again, I have observed that laravel is truncating my Category table.
There are two ways to seed table.
DatabaseSeeder and with php artisan db:seed and
Specific table seeder class by using
php artisan db:seed --class="CategoriesTableSeeder"
I am not able to catch behavior when its truncating my table.
I have tested it by commenting all line in the public function run(){} inside DatabaseSeeder class and also by commenting DB::table('categories')->insert($categories); and DB::table('categories')->truncate(); in CategoriesTableSeeder class.
Because table is getting truncated automatically, I have to seed it again and again.
Any idea???
To solve this problem have gone through all the possibilities. Searched through out the migration files and seed files everything was file. Its already more than 10 days, I was unable to resolve. Gone through the users comments also. But all that did not worked.
One day, I was checking database architecture and I found that engine for categories table was "Memory".
By default I had my database engine set to "InnoDB".
Changed it to "InnoDB" and Problem gone.
Doctrine (on Ubuntu): What command generate models from database without delete existing models?(I add new tables soo i want update models)
Thanks
If you're using Doctrine 1, you'll need to make use of Migrations. Migrations can either be written manually, or auto-generated one of a few different commands:
./doctrine generate-migration
./doctrine generate-migrations-db
./doctrine generate-migrations-models
Migrations can be a fairly complex topic, so I would read up on the documentation. You may also want to check out this slide show.
If you're using Doctrine 2, things get a little simpler. It doesn't have a Migrations class (yet), but there an easy-to-use command to non-destructively update your db schema:
./doctrine orm:schema-tool:update
This has worked well for me, but can sometimes fail due to complex foreign key constraints.