it-swarm.com.ru

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
Brigo

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

use Illuminate\Support\Facades\Schema;

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

В версии 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
Farhad

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

$table->string('code')->unique(null,'unikcode');
0
Tiago Gouvêa

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

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

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

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

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

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

0
Psipherious