【问题标题】:How do you use a BIGINT as an Auto-Incrementing Primary Key in Laravel 4如何在 Laravel 4 中使用 BIGINT 作为自增主键
【发布时间】:2013-07-28 02:36:25
【问题描述】:

我试图模仿 wordpress' primary key size 这是 BIGINT(20) 但似乎 laravel 没有本机函数来执行此操作.. 我看到了 page in the laravel forums 并得到了这样的代码:

$table->bigInteger('id')->primary();

但是当我在artisan migrate 期间尝试将外键附加到该 id 时,会抛出一个 MYSQL 错误:

[例外] SQLSTATE[HY000]:一般错误:1005 无法创建表 'db.#sql- 1730_15' (errno: 150) (SQL: 改变表 users 添加约束 users_role_id_foreign 外键 (role_id) 引用 roles (id)) (绑定: 数组 ( ))

这样做的正确方法是什么,或者我在哪里弄错了?

谢谢!

【问题讨论】:

  • 这不是laravel的问题,和foreignkey有关,foreignkey的列对和它的primarykey必须是同类型的,可以去掉primarykey,改变两列的类型,然后设置primarykey回来

标签: php mysql laravel laravel-4


【解决方案1】:

当使用 bigInteger() 时也将它应用到某个表中的foreign key,确保你用 unsignedBigInteger() 正确连接它,

public function up()
{
        Schema::create('create_this_table_after_users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
           // Other Columns
        });
        Schema::table('create_this_table_after_users', function($table) {
            $table->foreign('user_id')->references('id')->on('users');
            // Other Constraints 
        });
}

Reference Link of the Laravel 4.2 Doc

【讨论】:

  • 谢谢,伙计!我正在寻找为什么我不断收到此错误General error: 1215 Cannot add foreign key constraint
  • :) Glade 我帮助了你.. 快乐编码
  • 天啊,我在 Laravel 5.8 中迁移了这么多尝试。这帮助很大。
【解决方案2】:

您很可能忘记将您的 role_id 外键的类型也设置为 BIGINT(20)。这实际上不是 Laravel 的问题,而是 MySQL 的问题。


顺便说一句,Laravel 确实有一个原生函数可以做到这一点:

$this->bigIncrements('id');

这会使其无符号自动递增主键

【讨论】:

  • 嗨,->primary() 似乎没有使其成为自动增量键.. 也许这就是原因。现在我的问题是我应该如何使用 laravel 来完成它?
  • 为此找到了本机功能。更新了答案。
  • 是的,也已经看到了 (see here)。正要回答我自己的问题,但你在我之前编辑了它。问题是错误仍然存​​在,即使我在用户和角色表上都使用$this->bigIncrements('id');..
  • 是的,它现在是本机功能,只是尚未在主站点上记录。它在 API 上,但在 docs 上还没有
  • 哦,nvm .. 在我将代码复制粘贴到问题时找到了它。是的,它确实是类型不匹配。没有意识到我还在使用$table->unsignedInteger('role_id');,我现在已将其更新为$table->unsignedBigInteger('role_id');。非常感谢!
猜你喜欢
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 2015-09-03
  • 2015-11-13
  • 2015-10-27
  • 2012-07-31
相关资源
最近更新 更多