1. Migration.
- Migration can be understood as a version of your database at a point in time.
- It makes it easier to share your database schema when working as a team.
- Just run the migration and you can generate a schema just like you defined.
- And of course you can also edit the columns in the database.
2 Create migrations.
- To create a migration in laravel you just need to run the following command in terminal:
1 2 3 4 |
php artisan make:migration ten_migration --create=table_name //hoặc php artisan make:migration ten_migration --table=table_name |
- The result after running the command is that you get a migration file in the
database/migrations
directory - The
--create
or--table
part is to indicate the name of the table and whether the migration will create a new table. - Each migration file is named including
timestamp + tên
to identify the order of migartion with each other.
3 Migration files.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">use</span> <span class="token package">Illuminate Database Migrations Migration</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Database Schema Blueprint</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Support Facades Schema</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">extends</span> <span class="token class-name">Migration</span> <span class="token punctuation">{</span> <span class="token comment">/** * Run the migrations. * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">up</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token class-name type-declaration">Blueprint</span> <span class="token variable">$table</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">id</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token keyword type-declaration">string</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'email'</span> <span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">unique</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">timestamp</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'email_verified_at'</span> <span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">nullable</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token keyword type-declaration">string</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'password'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">rememberToken</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">timestamps</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * Reverse the migrations. * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">down</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">dropIfExists</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> </span> |
- In this file there are 2 functions, up and down .
- Basically, function up will run when you execute
php artisan migrate
command and function down will run when you executephp artisan migrate:rollback
command. - Of course, when function up is executed, it will create a table uers in your database and function down will delete that table.
4 Run migration
- As I mentioned above, to execute the migration files, you just need to run the command:
1 2 |
php artisan migrate |
- And to go back to the previous state, run the command:
1 2 |
php artisan migrate:rollback |
- You can also specify the number of recovery steps with the
--step
option.
1 2 |
php artisan migrate:rollback --step=5 |
- Laravel also gives you a way so that you don’t have to re-run migrate every time that rollback is
1 2 |
php artisan migrate:reset |
5. Schema
- You can understand Schema is used to
tạo, sửa, xóa,..
things related to tables in the database.
1 2 3 4 5 6 7 8 |
<span class="token comment">//tạo bảng</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token class-name type-declaration">Blueprint</span> <span class="token variable">$table</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">//đổi tên bảng</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">rename</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'post'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'posts'</span> <span class="token punctuation">)</span> <span class="token comment">//xóa bảng</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">drop</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">dropIfExists</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- You can also check if the table or column exists by
1 2 3 4 5 6 7 8 9 |
<span class="token comment">// kiểm tra bảng tồn tại</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">hasTable</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> <span class="token comment">// kiểm tra cột tồn tại</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">hasColumn</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'email'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> |
- Create column:
1 2 3 4 5 |
<span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token class-name type-declaration">Blueprint</span> <span class="token variable">$table</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">type</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'ten_cot'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">//type ở đây là chỉ các kiểu mà cột đó cần</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">type</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'ten_cot'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
- You can refer to the data types here: here
6. Foreign Key Constraints
- To create constraints for tables, we can use the following syntax to bind for 2 tables:
1 2 3 4 5 6 |
<span class="token class-name static-context">Schema</span> <span class="token operator">::</span> <span class="token function">table</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$table</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">integer</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'user_id'</span> <span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">unsigned</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-></span> <span class="token function">foreign</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'user_id'</span> <span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">references</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'id'</span> <span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">on</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'users'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Conclusion
- Above are the basics of migration I would like to introduce to you. Hope it will help you.
- The following section will introduce you to models in Laravel.