Блог программиста

Изучаем и разрабатываем что-то новое, делимся опытом.

Laravel - подключение к БД, миграции

Находим в корне проекта файл .env, внутри этого файла строчку DB_CONNECTION, настроим подключение к базе данных (БД) под себя. Я сделал это так:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=

У меня уже создана база данных test (также создайте себе для тестов), пользователь root с пустым паролем.

В принципе, подключение уже настроено.

Миграции

Миграции - это что-то вроде системы контроля версий для БД. Они позволяют программисту изменять структуру БД, в то же время оставаясь в курсе изменений других участников.

Давайте попробуем разобраться, что такое миграции.

Заходим в папку от корня проекта database/migrations. В ней расположены 2 файла: 2014_10_12_000000_create_users_table.php и 2014_10_12_100000_create_password_resets_table.php. Из названия можно понять, что это файлы, предназначенные для создания таблиц users и password_resets.

Выполним в консоли команду:

php artisan migrate

Обычно выдаёт такую ошибку:

PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes")

Её можно решить таким способом: зайдите в файл app/Providers/AppServiceProvider.php и в методе boot() класса AppServiceProvider добавьте код:

Schema::defaultStringLength(191);

выше описания этого класса добавьте строчку:

use Illuminate\Support\Facades\Schema;

В базе данных test начали создаваться какие-то таблички, но дело было прервано на середине пути. Нужно очистить БД test повторить заново

php artisan migrate

или без удаления табличек вызвать

php artisan migrate:fresh

После этого в базе данных создаётся три таблицы:

<ul>
<li>users - список пользователей</li>
<li>password_reset - таблица сброса паролей</li>
<li>migrations - таблица для миграций, со списком двух вышеперечисленных таблиц</li>
</ul>

Давайте создадим свою "миграцию". Например, это будет таблица студентов:

php artisan make:migration create_students_table

В каталоге database/migrations создался файл, имя которого формируется как дата, время, название миграции, у меня это 2018_12_08_103418_create_students_table.php, следующего содержания:

class CreateStudentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('students', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('students');
    }
}

Давайте вызовим команду:

php artisan migrate:fresh

Создаётся таблица students со следующими полями:

Давайте внимательно проанализируем. Метод increments создаёт AUTO_INCREMENT поле типа int(10), а timestamps два поля created_at и updated_at, которые, видимо, будут хранить информацию о создании и изменении строки таблицы.

Всё логично.

Теперь добавим в таблицу students поле id типа text. Это будет выглядеть примерно так:

Schema::create('students', function (Blueprint $table) {
	$table->increments('id');
	$table->text('name');
	$table->timestamps();
});

и выполним команду:

php artisan migrate:refresh

Поле добавилось.

Команды миграции fresh и refresh отличаются друг от друга тем, что 1-ая вначале удаляет все таблицы, а потом выполняет миграцию, то 2-ая делает вместо удаления откатку назад (Rolling back), а потом также выполняет миграцию таблиц.

Чтобы удалить поле из таблицы, нужно удалить строчку $table->text('name'); из файла миграции и заново выполнить команду:

php artisan migrate:refresh

Мы изучили подключение к базе данных и основы миграции. Продолжение следует...


Отправить комментарий
Наши проекты
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...
Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений