Khi lập trình với Go thì mình không có gì để phàn nàn ngoài 1 điều là Go không support sẵn các thư viện hỗ trợ lập trình viên tiết kiệm thời gian cho việc tạo migration/schema
.
Dạo 1 vòng quanh github search các thư viện cho Go có thể gặp
Nhưng tất cả đều rất khó sử dụng và yêu cầu lập trinh viên phải write up/down
migration bằng SQL instruction.
Trong khi đó, ở bên kia thế giới Ruby on Rails
cũng như Laravel/Symphony
lại hỗ trợ công việc này đến tận răng.
-
Laravel/Symphony
cung cấp sẵn một list command sau:$ php artisan list migrate ... Available commands for the "migrate" namespace: migrate:install Create the migration repository migrate:refresh Reset and re-run all migrations migrate:reset Rollback all database migrations migrate:rollback Rollback the last database migration migrate:status Show the status of each migration
-
Rails
cũng tương tự$ rails console Running via Spring preloader in process 21714 Loading development environment (Rails 5.2.2) irb(main):001:0> require 'rake' => true irb(main):002:0> Rails.application.load_tasks; 0 => 0 irb(main):003:0> Rake::Task.tasks.each do |task| irb(main):004:1* if 'db:'.in? task.name irb(main):005:2> puts task.name irb(main):006:2> end irb(main):007:1> end; 0 db:_dump db:abort_if_pending_migrations db:charset db:check_protected_environments db:collation db:create db:create:all db:drop db:drop:_unsafe db:drop:all db:environment:set db:fixtures:identify db:fixtures:load db:forward db:load_config db:migrate db:migrate:down db:migrate:redo db:migrate:reset db:migrate:status db:migrate:up db:purge db:purge:all db:reset db:rollback db:schema:cache:clear db:schema:cache:dump db:schema:dump db:schema:load db:schema:load_if_ruby db:seed db:setup db:structure:dump db:structure:load db:structure:load_if_sql db:test:load db:test:load_schema db:test:load_structure db:test:prepare db:test:purge db:version => 0 irb(main):008:0>
Vậy nếu muốn sử dụng các công cụ này cho project non-PHP hay non-Rails thì sao ? điều này hoàn toàn không hề khó, bạn có thể quăng hẳn nguyên bộ scaffolder khi dùng laravel new [app]
hay rails new [app]
vào thư mục dự án chính. Tuy nhiên dự án chính sẽ trở nên rất cồng kềnh.
Một cách khác, mình sẽ tách phần migrate và generate migration ra bên ngoài.
Với PHP
thay vì phải wrap lại Illuminate\Database\Migrations
ta có một cách tương đối dễ, đó là dùng luôn doctrine/migrations. Support tận răng 😭 Hoặc nếu bạn muốn sử dụng lại cũng khá dễ, chỉ cần tạo 1 file #!/usr/bin/env php > .php
trong đó khai báo các command muốn dùng và switch, cách sử dụng cũng đc ghi rất rõ ràng trên github:
Illuminate Database.
Với Rails
thì với một người không rành Ruby
như mình quả thực đây là một bài toán khó. Tuy nhiên sau khi chày cối học một chút syntax của Rails\Rake
thì mần vào core của Active Record > database_tasks.rb, databases.rake. Mình đã tách đc bề nổi thành công 😆
Nếu bạn muốn xem mình đã implement thế nào thì coi github repo này nhé 😄
⭐️ https://github.com/euclid1990/rails-migration
DONE