Миграции - упрощенная система контроля
версий для БД, которая позволяет
отслеживать изменения и создавать
таблицы БД, используя команды консоли.
И методы специального конструктора
таблиц класса схема.
Глобальные
настройки БД находятся в \config\database.php
В Laravel используется PDO.
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
Функция env предоставляет
доступ к локальным переменным вашей
среды разработки.
Эта функция находится в файле
.env в корне.
Изменим
настройки подключения:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=tlaravel
DB_USERNAME=root
DB_PASSWORD=
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=tlaravel
DB_USERNAME=root
DB_PASSWORD=
Идем
в \config\database.php
В параметре migrations указано имя таблицы,
в которой будет храниться информация
о применяемых миграциях проекта.
Создадим
миграцию.
Идем в консоль и пишем команду: php artisan
make:migration create_articles_table
Создаваемые миграции
располагаются здесь:
\database\migrations
Наш файл: 2017_07_06_154659_create_articles_table.php
Метод up
выполняется, когда мы выполняем конкретную
миграцию. Метод down
выполняется, когда мы отменяем миграцию,
когда откатывем изменения.
Если необходимо создать новую таблицу
в БД, то пишем новую команду для консоли:
php artisan make:migration create_articles_table --create=articles
ВНИМАНИЕ!!!
ЕСЛИ МИГРАЦИИ НЕ СОЗДАЮТСЯ, ТО РЕШЕНИЕ:
https://stackoverflow.com/questions/25237415/php-artisan-migratereset-failed-to-open-stream-no-such-file-or-directory
composer
dump-autoload
php
artisan migrate:rollback
Создается:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateArticlesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id'); // id INT AUTO_INCREMENT PRIMARY KEY
$table->timestamps(); // здесь будет храниться время создания и модификации конкретной записи
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('articles');
}
}
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateArticlesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id'); // id INT AUTO_INCREMENT PRIMARY KEY
$table->timestamps(); // здесь будет храниться время создания и модификации конкретной записи
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('articles');
}
}
Мы можем указывать свои данные для
формирования таблиц.
См. документацию:
https://laravel.com/docs/5.4/migrations
Добавим
в таблицу artcles несколько
полей в методе up:
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 100); // поле для названия статей varchar 100 символов
$table->text('text', 100); // текст статьи
$table->string('img', 255); // картинка
$table->timestamps();
});
}
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 100); // поле для названия статей varchar 100 символов
$table->text('text', 100); // текст статьи
$table->string('img', 255); // картинка
$table->timestamps();
});
}
Применим
миграцию
Для этого в консоли напишем: php artisan
migrate
Отменим
миграцию, т.е запустим в работу метод
down.
Для
этого в консоли напишем: php
artisan migrate:rollback
Изменим
таблицу: php artisan
make:migration change_articles_table —table=articles
Открываем
файл: 2017_07_06_172659_change_articles_table.php
Создадим
новое поле для таблицы:
public
function up()
{
Schema::table('articles', function (Blueprint $table) {
//
$table->string('alias', 100);
});
}
{
Schema::table('articles', function (Blueprint $table) {
//
$table->string('alias', 100);
});
}
А
в методе down удалим столбец:
public function down()
{
Schema::table('articles', function (Blueprint $table) {
//
$table->dropColumn('alias'); // удалим столбец
});
}
{
Schema::table('articles', function (Blueprint $table) {
//
$table->dropColumn('alias'); // удалим столбец
});
}
Идем
в консоль: php artisan
migrate
Теперь
мы видим, что была применена всего одна
миграция. В articles
добавлено
поле alias.
Откатим
миграцию: php artisan migrate:rollback
Поле
alias
исчезло.
Вернем
его. php artisan migrate
Если
нужно отменить все миграции: php artisan
migrate:reset
Эта команда отменяет действия всех
миграций.
Снова выполним все миграции: php
artisan migrate
Мы
можем использовать логику при формировании
миграций.
Если данная таблица существует, то мы
можем с ней работать:
public function up()
{
if(Schema::hasTable('articles')) {
Schema::table('articles', function (Blueprint $table) {
$table->string('alias', 100);
});
}
}
{
if(Schema::hasTable('articles')) {
Schema::table('articles', function (Blueprint $table) {
$table->string('alias', 100);
});
}
}
Определим, есть ли в таблице столбец.
Если столбец не существует, то мы его
создадим:
public function up()
{
if(Schema::hasTable('articles')) {
Schema::table('articles', function (Blueprint $table) {
if(!Schema::hasColumn('alias')) {
$table->string('alias', 100);
}
});
}
}
{
if(Schema::hasTable('articles')) {
Schema::table('articles', function (Blueprint $table) {
if(!Schema::hasColumn('alias')) {
$table->string('alias', 100);
}
});
}
}
При создании таблицы, мы можем указать
движок таблицы. В файле
2017_07_06_164539_create_articles_table.php
public function up()
{
Schema::create('articles', function (Blueprint $table) {
//$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name', 100); // поле для названия статей varchar 100 символов
$table->text('text', 100); // текст статьи
$table->string('img', 255); // картинка
$table->timestamps();
});
}
{
Schema::create('articles', function (Blueprint $table) {
//$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name', 100); // поле для названия статей varchar 100 символов
$table->text('text', 100); // текст статьи
$table->string('img', 255); // картинка
$table->timestamps();
});
}
Если необходимо изменить конкретные
атрибуты.
В 2017_07_06_172659_change_articles_table.php укажем значние
по умолчанию.
public function up()
{
if(Schema::hasTable('articles')) {
Schema::table('articles', function (Blueprint $table) {
if(!Schema::hasColumn('alias')) {
$table->string('alias', 100)->default('default');
}
});
}
}
{
if(Schema::hasTable('articles')) {
Schema::table('articles', function (Blueprint $table) {
if(!Schema::hasColumn('alias')) {
$table->string('alias', 100)->default('default');
}
});
}
}
Если
установить дополнительное
расширение
doctrine/dbal,
то можно изменять таблицы.
В корне сайта открываем
файл composer.json
Прописываем новую зависимость.
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"doctrine/dbal": "*"
},
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"doctrine/dbal": "*"
},
Версия нам не нужна, поэтому указываем
*.
Идем в консоль и пишем: composer update
Обновляем зависимости проекта.
Создадим
еще одну миграцию.
php artisan make:migration change_articles_table2 —table=articles
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ChangeArticlesTable2 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('articles', function (Blueprint $table) {
//
$table->string('alias')->default('alias')->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('articles', function (Blueprint $table) {
//
});
}
}
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ChangeArticlesTable2 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('articles', function (Blueprint $table) {
//
$table->string('alias')->default('alias')->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('articles', function (Blueprint $table) {
//
});
}
}
Применим
данную миграцию:
php
artisan migrate
Идем
в БД. Теперь в нашем поле по умолчанию
указано значение alias:
7
alias varchar(255) utf8mb4_unicode_ci Нет alias
Комментариев нет:
Отправить комментарий