私はlaravelとlaravelの移行メカニズムを使用しています。テーブルを作成し、外部キーを設定しました。ただし、テーブルはMyISSAMであるため、外部キーは作成されません。これを有効/構成するにはどうすればよいですか?(mysqlサーバーではなくInnoDBに変更するため)。
8 に答える
/config/database.phpファイルを編集し、mysqlエントリを検索して、以下を変更できます。
'engine' => null,
に
'engine' => 'InnoDB',
これ$table->engine = "InnoDB";
により、スキーマごとに追加する必要がなくなります;)
このようにエンジンを定義する
Schema::create("models", function(Blueprint $table) {
$table->engine = "InnoDB";
}
Schema\Tableクロージャ内でエンジンを設定できます。
@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');
}
}
}
これにより、すべてのテーブルを変換し、必要に応じてロールバックできるようになります。
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を介してエンティティクラス内の関係を簡単にマッピングできます
別のアプローチ(database.phpを使用しない)は、.env
ファイルに含めることです。
DB_ENGINE=InnoDB
'engine' => env('DB_ENGINE', null),
database.phpにあるかどうかを確認することを忘れないでください
サーバー側でInnoDbテーブルを使用すると、成功するための最良の方法です。MySQLWorkbenchを使用します。Workbenchで簡単にできます。また、ネイティブマニュアルを読みたい場合は
Schema::create('users', function($table)
{
$table->engine = 'InnoDB';
$table->string('email');
});
ドキュメントLaravelのように:https ://laravel.com/docs/4.2/schema#storage-engines
P / s:リンクを提供するように通知してくれた@NicoHaaseに感謝します。