Laravel & InnoDB

Я использую механизм миграции laravel и laravel. Я создал таблицы и установил внешние ключи. Но таблицы - это MyISSAM, поэтому внешние ключи не создаются. Где я могу включить/настроить это? (чтобы изменить его на InnoDB, а не на сервере mysql).

Ответ 1

Вы можете установить движок внутри Schema\Table close.

Ответ 2

Вы можете отредактировать файл /config/database.php, найти запись и изменить mysql:

'engine' => null,

к

'engine' => 'InnoDB',

Это избавит вас от добавления $table->engine = "InnoDB"; для каждой из ваших схем;)

Ответ 3

Определите такой движок

  Schema::create("models", function(Blueprint $table) {
            $table->engine = "InnoDB";
  }

Ответ 4

Я бы рекомендовал обновить ваш Mysql до версии 5.5 или выше. Механизм хранения по умолчанию для Mysql теперь - InoDB

Before MySQL 5.5.5, MyISAM is the default storage engine. (The default was changed to InnoDB in MySQL 5.5.5.) MyISAM is based on the older (and no longer available) ISAM storage engine but has many useful extensions. 

http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html

После выполнения вы можете легко сопоставить отношения внутри классов сущностей через Laravel

Ответ 5

Используйте таблицы InnoDb на стороне сервера, это лучший способ добиться успеха. Используйте MySQL Workbench. Это легко в Workbench. И, если вы хотите прочитать родной руководство

Ответ 6

Другой подход (для которого не используется database.php) - включить файл .env:

DB_ENGINE=InnoDB

Не забудьте проверить, есть ли у вас 'engine' => env('DB_ENGINE', null), в вашем database.php

Ответ 7

Schema::create('users', function($table)
{
    $table->engine = 'InnoDB';

    $table->string('email');
});

Ответ 8

Я обнаружил, что @ThomasLAURENT - лучшее решение, но как насчет существующих таблиц, которые у меня есть в моей базе данных.

Работаем вокруг.

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ConvertTablesIntoInnoDB extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        $tables = [
            'users',
            'products',
        ];
        foreach ($tables as $table) {
            DB::statement('ALTER TABLE ' . $table . ' ENGINE = InnoDB');
        }
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        $tables = [
            'users',
            'products',
        ];
        foreach ($tables as $table) {
            DB::statement('ALTER TABLE ' . $table . ' ENGINE = MyISAM');
        }
    }
}

Это позволит нам преобразовать все таблицы и откатить их, когда мне нужно.