38

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

4

8 に答える 8

111

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

'engine' => null,

'engine' => 'InnoDB',

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

于 2016-06-23T15:37:55.750 に答える
12

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

  Schema::create("models", function(Blueprint $table) {
            $table->engine = "InnoDB";
  }
于 2015-01-02T21:37:25.783 に答える
7

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

于 2012-07-07T12:34:06.680 に答える
4

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

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

于 2019-06-07T16:13:05.457 に答える
3

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を介してエンティティクラス内の関係を簡単にマッピングできます

于 2012-07-06T17:30:15.413 に答える
3

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

DB_ENGINE=InnoDB

'engine' => env('DB_ENGINE', null),database.phpにあるかどうかを確認することを忘れないでください

于 2018-10-26T12:51:39.803 に答える
1

サーバー側でInnoDbテーブルを使用すると、成功するための最良の方法です。MySQLWorkbenchを使用します。Workbenchで簡単にできます。また、ネイティブマニュアルを読みたい場合は

于 2012-10-10T15:00:57.727 に答える
1
Schema::create('users', function($table)
{
    $table->engine = 'InnoDB';

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

ドキュメントLaravelのように:https ://laravel.com/docs/4.2/schema#storage-engines

P / s:リンクを提供するように通知してくれた@NicoHaaseに感謝します。

于 2019-03-14T14:31:07.457 に答える