I am using laravel and laravel migration mechanism. I created tables and seted up foreign keys. But the tables are MyISSAM so no foreign keys are created. Where do I enable / configure this? (to change it to InnoDB and not in the mysql server).

shareimprove this questioneditedFeb 12 '14 at 21:15Pierre-Luc Pineault6,75562542askedJul 6 '12 at 8:45DigitalWM6451710

5 Answers正确答案

You can set the engine insideSchema\Table closure.

shareimprove this answereditedOct 21 '16 at 18:54Manolis Agkopian7971014answeredJul 7 '12 at 12:34crynobone1,632618

Sadly, that link seems to be dead now.–jlbangJul 17 '15 at 20:53Yup, dead link.–Captain HypertextJun 7 '16 at 19:19Now the way to do this ishereinConnection & Storage Engine–Thomas LAURENTJun 23 '16 at 15:18

add a comment


Storage Engines

To set the storage engine for a table, set the engine property on the schema builder:

Schema::create('users', function($table){
    $table->engine = 'InnoDB';

    $table->string('email');});


来自 https://laravel.com/docs/4.2/schema#storage-engines

You can edit your /config/database.php file, search formysqlentry and change:

'engine' => null,

to

'engine' => 'InnoDB',

This saves you from adding$table->engine = "InnoDB";for each of your Schemas ;)

shareimprove this answeransweredJun 23 '16 at 15:37Thomas LAURENT45538

This is perfect! Thank you!–ChristofferNov 19 at 13:57@Christoffer You're welcome :)–Thomas LAURENTNov 20 at 17:32

Define engine like this

Schema::create("models",function(Blueprint$table){$table->engine="InnoDB";}
shareimprove this answeransweredJan 2 '15 at 21:37srsajid35656

I would recommend to update your Mysql to 5.5 or higher. The default storage engine for Mysql now is InoDB

BeforeMySQL5.5.5,MyISAMisthedefaultstorage engine.(Thedefaultwas changed toInnoDBinMySQL5.5.5.)MyISAMisbased on the older(andnolonger available)ISAM storage engine but has many useful extensions.

http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html

Once done, you can easily map relationships within the entity classes via Laravel

shareimprove this answeransweredJul 6 '12 at 17:30Akash3,11633253

If the tables exist, changing the version to get a different default will not cause the existing tables to change. You needALTER TABLE t ENGINE=InnoDB;(for eacht).–Rick JamesJan 13 at 20:48

Use InnoDb tables on the server side it's best way to success. UseMySQL Workbench. It easy in Workbench. And, if you want read the nativemanual

shareimprove this answeransweredOct 10 '12 at 15:00RDK4,01321523

来自 https://stackoverflow.com/questions/11358849/laravel-innodb




laravel5 数据库配置(MySQL)

laravel5 数据库配置(MySQL)

首先有一个安装完成可以运行的laravel框架。

配置database.php

  • 进入laravel根目录。 
    在config目录下找到database.php文件。 
    显而易见这个文件是数据库相关的配置文件。

这里写图片描述

  • 找到mysql数据库的配置部分。 
    如图是默认的配置。

'mysql' => [    'driver' => 'mysql',                        //数据库的类型
    'host' => env('DB_HOST', 'localhost'),      //数据库的位置
    'port' => env('DB_PORT', '3306'),           //端口号
    'database' => env('DB_DATABASE', 'forge'),  //数据库名
    'username' => env('DB_USERNAME', 'forge'),  //用户名
    'password' => env('DB_PASSWORD', ''),       //密码
    'charset' => 'utf8',                        //字符集
    'collation' => 'utf8_unicode_ci',           //排序方式
    'prefix' => '',                             //前缀
    'strict' => true,                           //Strict模式
    'engine' => null,                           //引擎],

  'engine' => null,                           //引擎

MySQL部分代码如上。

  • 根据自己的需求修改配置

我的修改如下:

'mysql' => [    'driver' => 'mysql',    'host' => env('DB_HOST', 'localhost'),    'port' => env('DB_PORT', '3306'),    'database' => env('DB_DATABASE', 'mydb'),   //这里是我的数据库名
    'username' => env('DB_USERNAME', 'root'),   //这里是用户
    'password' => env('DB_PASSWORD', ''),       //密码
    'charset' => 'utf8',    'collation' => 'utf8_unicode_ci',    'prefix' => '',    'strict' => true,    'engine' => null,
],


修改.env

配置完database.php后,进行.env的配置。 
.env是框架的环境变量,是为了让这个选项在不同环境下有不同的值。 
.env文件在laravel根目录下。

只需要对文件的数据库部分进行修改。

DB_CONNECTION=mysqlDB_HOST=[数据库地址]DB_PORT=[端口(3306)]DB_DATABASE=[数据库]DB_USERNAME=[用户名]DB_PASSWORD=[密码]

我的修改如下:

DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=mydbDB_USERNAME=rootDB_PASSWORD=

创建数据表

  • 首先通过Artisan 命令建立一个迁移

我这里建立一个名为user的迁移 
注:要在框架的根目录下。 
在cmd中执行:

php artisan make:migration create_user_table

运行成功如下图

这里写图片描述

这样我们就可以在database/migrations目录下发现我们新生成的文件。

2016_09_20_123557_create_user_table.php

文件名前一部分是建立的时间后一部分是执行的名称。

文件如下: 
这里写图片描述

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;class CreateUserTable extends Migration{    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {        //这里是新增消息(表,列,索引)的位置
    }    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {        //这里删除信息的位置
    }
}
  • 我们在up()方法中添加如下信息。

    public function up()
    {
        Schema::create('user', function (Blueprint $table) {    //建立数据表user
            $table->increments('id');               //主键自增
            $table->string('name')->unique();       //'name'列唯一
            $table->string('password');             //'password'
            $table->string('email')->unique();      //'email'唯一
            $table->timestamps();                   //自动生成时间戳记录创建更新时间
        });
    }

接下来。

  • 执行迁移

在cmd中执行

php artisan migrate

成功后如图:

这里写图片描述

则表明建表成功。 
进入数据库可以看见表。

这里写图片描述

这样数据库的基本配置部分就完成了。

来自  https://www.cnblogs.com/clew/p/5894237.html