我正在使用拉拉维尔和拉拉维尔迁移机制。我创建了表并设置了外键。但是表是MyISSAM的,因此不会创建外键。我在哪里启用/配置它?(将其更改为InnoDB而不是在mysql服务器中)。
您可以编辑/config/database.php 文件,搜索 mysql 条目并更改:
'engine' => null,
自
'engine' => 'InnoDB',
这样可以避免为每个架构添加$table->engine = "InnoDB";
;)
像这样定义引擎
Schema::create("models", function(Blueprint $table) {
$table->engine = "InnoDB";
}
您可以在 Schema''Table 闭包中设置引擎。
另一种方法(不使用数据库.php)是包含在.env
文件中:
DB_ENGINE=InnoDB
请记住检查数据库中是否有'engine' => env('DB_ENGINE', null),
.php
我发现@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轻松映射实体类内的关系
Schema::create('users', function($table)
{
$table->engine = 'InnoDB';
$table->string('email');
});
喜欢文件拉拉维尔:https://laravel.com/docs/4.2/schema#storage-engines
P/s:感谢Haase提醒我提供链接@Nico。
在服务器端使用 InnoDb 表是成功的最佳方式。使用 MySQL 工作台。在工作台上很容易。而且,如果您想阅读本机手册
对于那些不使用database.php)的人来说,最好的方法是包含在.env文件中:DB_ENGINE=InnoDB。记得检查你的数据库上是否有'engine' => env('DB_ENGINE', null).php