web-dev-qa-db-ja.com

Laravel&InnoDB

laravelおよびlaravel移行メカニズムを使用しています。テーブルを作成し、外部キーを設定しました。ただし、テーブルはMyISSAMなので、外部キーは作成されません。これを有効化/構成しますか?(mysqlサーバーではなく、InnoDBに変更します)。

23
DigitalWM

/config/database.phpファイルを編集し、mysqlエントリを検索して変更します。

'engine' => null,

'engine' => 'InnoDB',

これにより、スキーマごとに$table->engine = "InnoDB";を追加する必要がなくなります;)

73
Thomas LAURENT

このようにエンジンを定義する

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

内部でエンジンを設定できます Schema\Tableクロージャ。

7
crynobone

Mysqlを5.5以上に更新することをお勧めします。 MysqlのデフォルトのストレージエンジンはInoDBになりました。

MySQL 5.5.5より前のバージョンでは、MyISAMがデフォルトのストレージエンジンです。 (デフォルトはMySQL 5.5.5でInnoDBに変更されました。)MyISAMは古い(そしてもはや利用できない)に基づいていますISAMストレージエンジンですが、多くの便利な拡張機能があります。

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

完了したら、Laravelを使用してエンティティクラス内の関係を簡単にマッピングできます

3
Akash

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

これにより、すべてのテーブルを変換し、必要なときにそれらをロールバックできます。

2
Yousef Altaf

(database.phpを使用しない)別のアプローチは、_.env_ファイルに含めることです。

_DB_ENGINE=InnoDB_

Database.phpに'engine' => env('DB_ENGINE', null),があるかどうかを確認してください

1
Tiago Gouvêa

サーバー側でInnoDbテーブルを使用することが、成功への最良の方法です。 MySQL Workbench を使用します。 Workbenchでは簡単です。そして、もしあなたがネイティブを読みたいなら manual

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

    $table->string('email');
});
0
Huy Nguyễn