Motor Mysql InnoDB en Laravel

2 minutos de lectura

avatar de usuario
WM digital

Estoy usando laravel y el mecanismo de migración de laravel. Creé tablas y configuré claves foráneas. Pero las tablas son MyISSAM, por lo que no se crean claves externas. ¿Dónde habilito/configuro esto? (para cambiarlo a InnoDB y no en el servidor mysql).

Descubrí que @ThomasLAURENT es la mejor solución, pero ¿qué pasa con las tablas existentes que tengo en mi base de datos?

Trabajando alrededor.

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');
        }
    }
}

Esto nos permitirá convertir todas las tablas y revertirlas cuando lo necesite.

avatar de usuario
Huy Nguyễn

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

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

Como documento Laravel: https://laravel.com/docs/4.2/schema#storage-engines

P/s: Gracias @Nico Haase por recordarme que proporcione el enlace.

  • ¿Hay alguna forma de una definición global, de modo que funcione para todos ¿mesas? Que es eso email ¿Para qué sirve la columna?

    –Nico Haase

    14 de marzo de 2019 a las 15:08

  • @NicoHaase, esa columna de correo electrónico es solo un ejemplo y para responder a su pregunta Yes puede definirlo globalmente. Para hacer eso ve a config/database.php Y debajo mysql cambio de clave 'engine' => null, para 'engine' => 'InnoDB',.

    – Sr. Singh

    11 oct 2019 a las 7:30


  • Esto parece copiar y pegar de laravel.com/docs/4.2/schema#storage-motores – si ya lo hace, al menos debe proporcionar un enlace

    –Nico Haase

    11 oct 2019 a las 7:35

avatar de usuario
srsajid

Definir motor como este

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

  • ¿Hay alguna forma de una definición global, de modo que funcione para todos ¿mesas? Que es eso email ¿Para qué sirve la columna?

    –Nico Haase

    14 de marzo de 2019 a las 15:08

  • @NicoHaase, esa columna de correo electrónico es solo un ejemplo y para responder a su pregunta Yes puede definirlo globalmente. Para hacer eso ve a config/database.php Y debajo mysql cambio de clave 'engine' => null, para 'engine' => 'InnoDB',.

    – Sr. Singh

    11 oct 2019 a las 7:30


  • Esto parece copiar y pegar de laravel.com/docs/4.2/schema#storage-motores – si ya lo hace, al menos debe proporcionar un enlace

    –Nico Haase

    11 oct 2019 a las 7:35

avatar de usuario
Manolis Agkopian

Puede configurar el motor en el interior Esquema\Cierre de tabla.

  • Lamentablemente, ese enlace parece estar muerto ahora.

    – jlbang

    17/07/2015 a las 20:53

  • Ahora la manera de hacer esto es aquí en Motor de conexión y almacenamiento

    – Thomas LAURENT

    23 de junio de 2016 a las 15:18

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad