laravelおよびlaravel移行メカニズムを使用しています。テーブルを作成し、外部キーを設定しました。ただし、テーブルはMyISSAMなので、外部キーは作成されません。これを有効化/構成しますか?(mysqlサーバーではなく、InnoDBに変更します)。
/config/database.phpファイルを編集し、mysqlエントリを検索して変更します。
'engine' => null,
に
'engine' => 'InnoDB',
これにより、スキーマごとに$table->engine = "InnoDB";
を追加する必要がなくなります;)
このようにエンジンを定義する
Schema::create("models", function(Blueprint $table) {
$table->engine = "InnoDB";
}
内部でエンジンを設定できます Schema\Tableクロージャ。
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を使用してエンティティクラス内の関係を簡単にマッピングできます
@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');
}
}
}
これにより、すべてのテーブルを変換し、必要なときにそれらをロールバックできます。
(database.phpを使用しない)別のアプローチは、_.env
_ファイルに含めることです。
_DB_ENGINE=InnoDB
_
Database.phpに'engine' => env('DB_ENGINE', null),
があるかどうかを確認してください
サーバー側でInnoDbテーブルを使用することが、成功への最良の方法です。 MySQL Workbench を使用します。 Workbenchでは簡単です。そして、もしあなたがネイティブを読みたいなら manual
Schema::create('users', function($table)
{
$table->engine = 'InnoDB';
$table->string('email');
});