Laravel & InnoDB

php mysql laravel innodb

18071 просмотра

8 ответа

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

Автор: DigitalWM Источник Размещён: 12.07.2019 12:00

Ответы (8)


61 плюса

Решение

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

'engine' => null,

в

'engine' => 'InnoDB',

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

Автор: Thomas LAURENT Размещён: 23.06.2016 03:37

9 плюса

Определите двигатель как это

  Schema::create("models", function(Blueprint $table) {
            $table->engine = "InnoDB";
  }
Автор: srsajid Размещён: 02.01.2015 09:37

7 плюса

Вы можете установить двигатель внутри схемы \ Закрытие таблицы.

Автор: crynobone Размещён: 07.07.2012 12:34

3 плюса

Я бы порекомендовал обновить ваш 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.

Автор: Akash Размещён: 06.07.2012 05:30

1 плюс

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

Автор: RDK Размещён: 10.10.2012 03:00

0 плюса

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

    $table->string('email');
});
Автор: Huy Nguyễn Размещён: 14.03.2019 02:31

0 плюса

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

DB_ENGINE=InnoDB

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

Автор: Tiago Gouvêa Размещён: 26.10.2018 12:51

0 плюса

Я обнаружил, что @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');
        }
    }
}

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

Автор: Yousef Altaf Размещён: 07.06.2019 04:13
Вопросы из категории :
32x32