我正在使用 laravel 和 laravel 迁移机制。我创建了表并设置了外键。但是这些表是 MyISSAM,所以没有创建外键。我在哪里启用/配置这个?(将其更改为 InnoDB 而不是在 mysql 服务器中)。
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 上是否有
Schema::create('users', function($table)
{
$table->engine = 'InnoDB';
$table->string('email');
});
喜欢文档 Laravel:https ://laravel.com/docs/4.2/schema#storage-engines
P/s:感谢@Nico Haase 提醒我提供链接。