我正在使用laravel和laravel迁移机制。我创建了表并设置了外键。但是表是MyISSAM,所以没有创建外键。我在哪里启用/配置它?(将其更改为InnoDB,而不是在MySQL服务器中)。
mnemlml81#
您可以编辑/config/database. php文件,搜索 mysql 项并更改:'engine' => null,到'engine' => 'InnoDB',这样就不必为每个Schemas添加$table->engine = "InnoDB";;)
'engine' => null,
'engine' => 'InnoDB',
$table->engine = "InnoDB";
vc6uscn92#
这样定义发动机
Schema::create("models", function(Blueprint $table) { $table->engine = "InnoDB"; }
1rhkuytd3#
您可以在Schema\Table闭包中设置引擎。
ldfqzlk84#
另一种方法(不使用database.php)是在.env文件中包含:DB_ENGINE=InnoDB记得检查一下你的database.php上是否有'engine' => env('DB_ENGINE', null),
.env
DB_ENGINE=InnoDB
'engine' => env('DB_ENGINE', null),
qfe3c7zg5#
我发现@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'); } } }
这将允许我们转换所有表,并在需要时回滚它们。
wnrlj8wa6#
我建议把你的Mysql升级到5.5或者更高。现在Mysql的默认存储引擎是InoDB
http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html完成后,您可以通过Laravel轻松地Map实体类中的关系
np8igboo7#
在服务器端使用InnoDb表,这是成功的最佳方法。使用MySQL Workbench。在Workbench中很容易。而且,如果您想读取原生manual
xoefb8l88#
Schema::create('users', function($table) { $table->engine = 'InnoDB'; $table->string('email'); });
如文件Laravel:https://laravel.com/docs/4.2/schema#storage-enginesP/s:感谢@Nico Haase提醒我提供链接。
js5cn81o9#
对于那些不使用database.php的用户来说,最好的方法是在.env文件中包含:DB_ENGINE=InnoDB.记得检查您的数据库上是否有'engine' =〉env('DB_ENGINE',null).php
9条答案
按热度按时间mnemlml81#
您可以编辑/config/database. php文件,搜索 mysql 项并更改:
'engine' => null,
到
'engine' => 'InnoDB',
这样就不必为每个Schemas添加
$table->engine = "InnoDB";
;)vc6uscn92#
这样定义发动机
1rhkuytd3#
您可以在Schema\Table闭包中设置引擎。
ldfqzlk84#
另一种方法(不使用database.php)是在
.env
文件中包含:DB_ENGINE=InnoDB
记得检查一下你的database.php上是否有
'engine' => env('DB_ENGINE', null),
qfe3c7zg5#
我发现@ThomasLAURENT是最好的解决方案,但是我数据库中现有的表怎么办?
四处走走。
这将允许我们转换所有表,并在需要时回滚它们。
wnrlj8wa6#
我建议把你的Mysql升级到5.5或者更高。现在Mysql的默认存储引擎是InoDB
http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html
完成后,您可以通过Laravel轻松地Map实体类中的关系
np8igboo7#
在服务器端使用InnoDb表,这是成功的最佳方法。使用MySQL Workbench。在Workbench中很容易。而且,如果您想读取原生manual
xoefb8l88#
如文件Laravel:https://laravel.com/docs/4.2/schema#storage-engines
P/s:感谢@Nico Haase提醒我提供链接。
js5cn81o9#
对于那些不使用database.php的用户来说,最好的方法是在.env文件中包含:DB_ENGINE=InnoDB.记得检查您的数据库上是否有'engine' =〉env('DB_ENGINE',null).php