如何在Laravel 4中使用BIGINT作为自增的主键?

9 浏览
0 Comments

如何在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) references roles (id)) (Bindings: array (

))

请问应该如何正确操作或者我哪里出错了?

谢谢!

0
0 Comments

在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”错误。希望这篇文章对你有所帮助,祝你编码愉快!

0
0 Comments

问题的原因是在使用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')后问题得到解决。

0