如何在Laravel 4中使用BIGINT作为自增的主键?
如何在Laravel 4中使用BIGINT作为自增的主键?
我试图模仿WordPress的主键大小,即BIGINT(20),但似乎Laravel没有本地函数可以做到这一点.. 我在Laravel论坛上看到一个帖子,并得到了如下代码:
$table->bigInteger('id')->primary();
但当我在artisan migrate
期间尝试将一个外键附加到该id时,会出现一个MYSQL错误:
[Exception]
SQLSTATE[HY000]: General error: 1005 Can't create table 'db.#sql-
1730_15' (errno: 150) (SQL: alter table
users
add constraint users_role_id_foreign foreign key (role_id
) referencesroles
(id
)) (Bindings: array ())
请问应该如何正确操作或者我哪里出错了?
谢谢!
在Laravel 4中,当使用bigInteger()方法来创建一个表的自增主键时,如果将其应用于另一个表的外键,需要确保使用unsignedBigInteger()方法进行连接。这样可以避免出现“General error: 1215 Cannot add foreign key constraint”错误。
具体的解决方法如下所示:
public function up() { Schema::create('create_this_table_after_users', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('user_id'); // 其他列 }); Schema::table('create_this_table_after_users', function($table) { $table->foreign('user_id')->references('id')->on('users'); // 其他约束 }); }
以上代码中,使用了bigIncrements()方法创建了一个自增主键id,然后使用unsignedBigInteger()方法创建了一个无符号的bigInteger类型的外键user_id。最后,使用foreign()方法将user_id设置为对users表的id字段进行引用。
这个问题的解决方法来自于Laravel 4.2文档的参考链接。
通过以上的方法,可以解决在Laravel 4中使用bigInteger()作为自增主键时,同时将其作为外键时可能出现的“Cannot add foreign key constraint”错误。希望这篇文章对你有所帮助,祝你编码愉快!
问题的原因是在使用Laravel 4时,将BIGINT作为自动增量的主键时出现了错误。解决方法是在设置role_id的外键类型时也要将其设置为BIGINT(20)。在Laravel中有一个原生函数可以解决这个问题,即使用$this->bigIncrements('id'),它会自动将字段设置为unsigned、auto increment和primary key。但是,即使在users和roles表中都使用了$this->bigIncrements('id'),错误仍然存在。最后发现错误是因为在设置外键类型时出现了类型不匹配的问题,将unsignedInteger('role_id')更改为unsignedBigInteger('role_id')后问题得到解决。