2013-06-18 4 views
4

У меня вопрос о создании таблицы (обычно работающей с БД) в laravel через миграции.Laravel, migrations Класс схемы

У меня есть что-то вроде этого (с кодом счастливом)

<?php 
     Schema::create('users', function($table) { 

     $table->increments('id'); 

     $table->string('username', 32); 
     $table->string('email', 320); 
     $table->string('password', 64); 

     $table->integer('role'); 

     $table->boolean('active'); 

     $table->timestamps(); 
    }); 

OK это создаст таблицу «пользователи» с 9 полей, но я путаюсь этим обратного вызова. В первую очередь переменная «$ table» является экземпляром какого класса? Может кто-нибудь объяснить мне, что здесь произошло, соответственно, как это работает?

ответ

9

Ну, вот как это происходит:

  1. При вызове Schema::create(), он создает Blueprint объекта, связанный с именем таблицы, переданным в качестве аргумента.
  2. Второй параметр, обратный вызов, представляет собой Closure, который получит этот ранее созданный объект Blueprint в качестве аргумента $table и действует на него.
  3. Когда вы вызываете методы на объекте $table, он фактически подключает его к классу Grammar, согласно вашей базе данных. То есть, если вы используете базу данных MySQL, она будет использовать класс MySqlGrammar. Это гарантирует, что вы получите действующий SQL для любой используемой вами базы данных, не беспокоясь об этом.
  4. Наконец, он выполняет все команды и выполняет всю работу за вас.

Если вы хотите, чтобы увидеть фактические запросы SQL генерируется, вы можете добавить опцию --pretend к команде migrate. Я бы рекомендовал сохранить его в файле, чтобы вы могли легко прочитать его. Пример:

php artisan migrate --pretend > app/storage/migration.sql 

Это сохранить его в файле app/storage/migration.sql.

Смежные вопросы