Laravel 5.6: не удалось создать таблицу

Я новичок в Laravel и пытаюсь создавать таблицы используя Schema фасад. Я создаю файл миграции с командой

php artisan make:migration create_products_define_standards_table --create=products_define_standards

Вот файл:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

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

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

Это действительно имеет почти такое же содержание по умолчанию CreateUsersTable, но когда я бегу php artisan migrate это создает:

  • usersТаблица (по умолчанию)
  • migrationsТаблица (по умолчанию)

но не:

  • password_resetsТаблица (по умолчанию)
  • products_define_standards‘стол (на заказ)

Я пробовал с php artisan migrate:fresh но я получаю такой же журнал:

Dropped all tables successfully.
Migration table created successfully.

Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

at /home/whatever/whatever.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php: 664
660:         // If an exception occurs when attempting to run a query, we'll format the error
661:         // message to include the bindings with SQL, which will make this exception a
662:         // lot more helpful to the developer instead of just the database's errors.
663:         catch (Exception $e) {
664:             throw new QueryException(
665:                 $query, $this->prepareBindings($bindings), $e
666:             );
667:         }
668:
669:         return $result;

Exception trace:

1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes")
/home/whatever/whatever.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php : 458

2   PDOStatement::execute()
/home/whatever/whatever.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php : 458

я нашел этот ответ и я бегу также composer dumpauto но результат тот же.

Я что-то пропустил? Должен ли я сделать что-нибудь еще, чтобы зарегистрировать миграцию где-нибудь еще?

3

Решение

Отредактируйте свой AppServiceProvider.php находится в app/Providers каталог, а внутри boot() Метод устанавливает длину строки по умолчанию.

use Illuminate\Support\Facades\Schema;

public function boot()
{
Schema::defaultStringLength(191);
}
9

Другие решения

В версии 5.6 вы должны отредактировать 2 файла:

Первый

Отредактируйте ваш AppServiceProvider.php, расположенный в каталоге app / Providers, и в методе boot () установите длину строки по умолчанию.

use Illuminate\Support\Facades\Schema;

public function boot()
{
Schema::defaultStringLength(191);
}

второй

Отредактируйте ваш файл database.php, расположенный в каталоге config / database.php

в разделе конфигурации mysql ‘engine’ равен null, и его следует заменить на ‘InnoDB ROW_FORMAT=DYNAMIC

надеюсь, ты повеселишься.

1

Подходящие к этой работе здесь передают второй параметр с ключевым именем (коротким):

$table->string('code')->unique(null,'unikcode');
0

Я хотел бы предложить потенциальное лучшее решение этой проблемы.

Вам не нужно редактировать файлы, которые являются частью вашего Laravel. Вместо этого отредактируйте фактическую сопоставление базы данных и движок.

Я предполагаю, что вы используете либо MySQL, либо MariaDB. Используйте phpMyAdmin, при создании пустой базы данных используйте utf8mb4_unicode_ci (utf8_unicode_ci или utf8P_general_ci также могут нормально работать).

Затем установите ядро ​​базы данных по умолчанию на InnoDB вместо MyISAM (вы можете сделать это также в phpMyAdmin на вкладке «Переменные», поиск «двигатель»).

Другие решения, предложенные людьми — то есть редактирование database.php, чтобы он все равно использовал InnoDB, имеют очень похожий эффект. Но современные версии MySQL / Maria должен использовать InnoDB из коробки в любом случае.

Запустите миграцию, и она будет работать нормально без дальнейших изменений.

0
По вопросам рекламы [email protected]