I am new laravel programmer, and I have simple question
about setting up database.
Assume that I create all required migrations, models, and eloquent relationships, also configure mysql database in laravel, now in this point, is laravel will create all mysql tables required in server's DB according to migrations, models, and eloquent that I created before?
In other words, do I need to create tables in mysql server as scratch developer do?
To create a migration, use the make:migration Artisan command:
php artisan make:migration create_users_table
To run all of your outstanding migrations, execute the migrate Artisan command:
php artisan migrate
Laravel have many commands from console.
from console,go to your project folder path run php artisan list to see all avaliable commands.
your question asked how to create tables after you created migrations, which is php artisan migrate.
Related
I have an issue with laravel.
I have created a database named billing and connection is working fine for all tables. Now I created a new table named as masters. When I'm using this table then it is showing error base table or view masters not found
How can I resolve this issue?
This is usual for beginners. I have a few hints:
You might want to manually check the database, outside of Laravel, to
be sure the table has not been add.
Sometimes, you might just have misspelt the table name.
Did you forget to run the migration? If so, you need to run the
migration to add the table to the database. You can simple use php
artisan migrate on the command line.
If all these don't resolve it, dump you autoload files with composer and rerun your migration. You can use composer dumpautoload and then php artisan migrate:refresh
To create a migration, use the make:migration Artisan command:
php artisan make:migration create_masters_table
The new migration will be placed in your database/migrations directory.
You can use Laravel schema builder to expressively create and modify tables.
To run all of your outstanding migrations, execute the migrate Artisan command: php artisan migrate
after I've manually deleted a table in mysql, I run the command:
php artisan migrate
and I get this:
Nothing to migrate.
it only works the first time, how to re-run the migration in laravel?
Laravel keeps a record of migrations that have been run. You need to go to the migrations table and delete the migration record. Laravel does this so that it knows which migrations have been run so that it doesn't run them again and so that in the case of a rollback, it knows the last batch of migrations which were done.
This may help https://laravel.com/docs/5.6/migrations
Try composer dump-autoload AND php artisan config:cache
if not working also Try php artisan migrate:refresh.
OR Also Delete Migration table in database.
You can simply do: php artisan migrate: fresh to re-migrate your migration and if you have seeder data then you simply do: php artisan migrate: fresh -- seed
If you delete a table by hand, will have to delete the record from "migration" table too. This way when artisan migrate checks if your migration are not in "migration" table will migrate the unregistered ones.
That is the expected behaviour if you manually delete a table, because the previous batch migration job has already been deployed (in migrations table).
IF you want to re-migrate all the database, you can simply do: php artisan migrate:refresh.
IF you want to make sure your database to be clean with your latest changes, you can drop your entire database tables and do php artisan migrate again. Also, you can try php artisan migrate --seed if you have any seeder.
The best thing you can do is drop the table from the database and then rename the migration last number and do
php artisan migrate
This doesn't recreate all the tables.
I am having a very weird issue when running
php artisan migrate
on a new installation of Laravel 5.4 on a local XAMPP server with php 7.1.1.
What it is doing is creating a migrations and users table, the default tables in older versions of Laravel. What is should be creating is a users table and a passwords reset table, the new default tables. My env file is correct because I am connecting to the database correctly but then if I change the table I am connecting to in the env file it is not updating.
To me, it seems like the command is simply not running on the correct migrations folder in the application. This is a brand new machine with a fresh install of XAMPP and Laravel so I am very confused as to why this is happening. Any help would be much appreciated!!!
I was finally able to get this to work so I wanted to answer the question to explain what I did.
This first step may not be required for you but it was for me. Once again, here is what I was using: Laravel 5.4 on a local XAMPP server with php 7.1.1
-First I needed to edit app>Providers>AppServiceProvider.php https://laravel-news.com/laravel-5-4-key-too-long-error
-Add this line to the top, under the other use include: use Illuminate\Support\Facades\Schema;
-In the boot() function add this code: Schema::defaultStringLength(191);
-After that I needed to run php artisan migrate, to create the default tables from the migrations. For some reason, a reason I could not find with any amount of research, this creates the old tables from an unknown source. After that I needed to edit the create_users_table migration, delete the users and migrations table that were created in the database, then rerun php artisan migrate. Like I said, I am not sure why this has to be done but it will get it to work.
Also, remember to run these commands before running php artisan migrate the last time just to be safe:
php artisan cache:clear
php artisan config:cache
php artisan migrate:refresh
php artisan migrate
Is
php artisan make:model Test -m
equivalent to
php artisan make:migration create_tests_table --create=tests
?
Does make:model -m create a tests table?
In php artisan make:model Test -m, The -m flag will create a migration file for that model.
In php artisan make:migration create_tests_table --create=tests, the --create flag is the name of the table that will be created.
So yes, the -m option will create a migration file with a name like TIMESTAMP_create_tests_table.php
Update
If you find yourself in a situation when you doubt about commands, you can always run a command like this form your terminal: php artisan help make:model. You'll see an overview with some explenation about the extra options of that specific command.
No they are not equivalent; they are very different. One is creating a model AND also creating a migration while the other is just creating a migration (both migrations include a table called tests). Bear in mind that creating a model and creating a table are not the same thing. From the docs: "The Eloquent ORM included with Laravel provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding "Model" which is used to interact with that table. Models allow you to query for data in your tables, as well as insert new records into the table."
https://laravel.com/docs/5.8/eloquent#defining-models
I have created 2 migrations in order to create 2 tables in Laravel, but I manually deleted these tables from database. Now, when I want to re-create these tables with migration, none of the following artisan commands works:
artisan migrate, artisan migrate:install, artisan migrate:refresh, artisan migrate:reset
It will return error like "nothing to migrate" or "tables [name] already exists" etc. I think laravel is somewhere keeping record of created tables. But how can I fix it now?
At first Manually delete all the Tables of your database also the migrations table, make your current database empty and then migrate the database and now you can use any artisan command for migration