Laravel创建数据库表结构的例子(5)

7、索引

创建索引

schema构建器支持多种类型的索引,首先,让我们看一个指定列值为唯一索引的例子。要创建索引,可以使用unique方法:

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

此外,你可以在定义列之后创建索引,例如:

$table->unique('email');

你甚至可以传递列名数组到索引方法来创建组合索引:

$table->index(['account_id', 'created_at']);

Laravel 会自动生成合理的索引名称,但是你可以传递第二个参数到该方法用于指定索引名称:

$table->index('email', 'my_index_name');

可用索引类型

命令 描述

$table->primary('id'); 添加主键索引
$table->primary(['first', 'last']); 添加混合索引
$table->unique('email'); 添加唯一索引
$table->unique('state', 'my_index_name'); 指定自定义索引名称
$table->index('state'); 添加普通索引

删除索引

要删除索引,必须指定索引名。默认情况下,Laravel 自动分配适当的名称给索引——简单连接表名、列名和索引类型。下面是一些例子:

命令 描述

table−>dropPrimary(‘usersidprimary′);从“users”表中删除主键索引table−>dropPrimary(‘usersidprimary′);从“users”表中删除主键索引table->dropUnique(‘users_email_unique'); 从 “users”表中删除唯一索引 
$table->dropIndex(‘geo_state_index'); 从 “geo”表中删除普通索引 

如果要传递列数组到删除索引方法,那么相应的索引名称将会通过数据表名、列和关键类型来自动生成:

Schema::table(‘geo', function (table) {table) {table->dropIndex([‘state']); // Drops index ‘geo_state_index' 
}); 

外键约束

Laravel 还提供了创建外键约束的支持,用于在数据库层面强制引用完整性。例如,我们在posts表中定义了一个引用users表的id列的user_id列:

Schema::table(‘posts', function (table) {table) {table->integer(‘user_id')->unsigned(); 
$table->foreign(‘user_id')->references(‘id')->on(‘users'); 
}); 

你还可以为约束的“on delete”和“on update”属性指定期望的动作:

$table->foreign(‘user_id') 
->references(‘id')->on(‘users') 
->onDelete(‘cascade'); 

要删除一个外键,可以使用dropForeign方法。外键约束和索引使用同样的命名规则——连接表名、外键名然后加上“_foreign”后缀:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5546.html