Laravel的Schema Class提供了一种不可知(agnostic way)的方式来操作table,即对于所有Laravel所支持的数据库都可以用统一的方法及API来操作,而Laravel并不需要知道当前使用的是哪一个具体的数据库。
在使用Schema Class的时候,我们可以很方便地为当前的table添加foreign key:
- 1
- 2
- 1
- 2
以上代码中,我们为当前table添加了一个unsigned integer column,并且让该column作为foreign key来指向users这个table中的id column。
注意:一定要先创建column才能使用->foreign()来指向其他table。在本例中即必须先创建user_id这个column才能继续创建foreign key。
如果要添加ON DELETE或者ON UPDATE的选项也很简单:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
是不是感觉和MySQL的语法很相似呢?
如果要删除一个foreign key,可以使用dropForeign这个方法:
- 1
- 1
还有非常重要的:由于使用->increments()创建的column(通常是id)相对应的类型是unsigned integer(并且该column会自动作为primary key),所以在创建foreign key的时候,一定要记得把column添加->unsigned():
- 1
- 1
这个步骤非常重要,如果没有添加,那么在用artisan进行migrate的时候会报错,而报错信息只会显示:
以上信息中我们并不能看出问题所在。如果我们手动添加一下这个foreign key,可以看到如下结果:
我们可以看到,红字的部分描述了问题所在,即当前table中所作为foreign key的column必须和目标table中的column类型匹配。
这也就是为什么我们必须添加->unsigned()的原因。
如需更多的参考,可以移步至Laravel官方Documentaion:
https://laravel.com/docs/4.2/schema#foreign-keys