【问题标题】:Laravel 4 - Artisan error SQLSTATE[42000]Laravel 4 - 工匠错误 SQLSTATE [42000]
【发布时间】:2013-02-02 14:49:58
【问题描述】:

我正在尝试为我的 users 表创建一个新的迁移,我有以下架构:

        Schema::create('users', function($t) {
            $t->increments('id');
            $t->string('username', 16);
            $t->string('password', 64);
            $t->integer('role', 64);
            $t->timestamps();
    });

当我尝试从终端运行 php artisan migrate 时,出现以下错误:

[例外]
SQLSTATE [42000]:语法错误或访问冲突:1075 不正确 表定义;只能有一个自动列,并且必须 被定义为一个键 (SQL: create table users (id int unsigne d 不为空 auto_increment 主键,username varchar(16) 不为空, password varchar(64) 不为空,role int 不为空 auto_increment 主键,created_at timestamp default 0 not null , updated_at timestamp default 0 not null)) (Bindings: array (
))

该错误与“角色”字段有关,因为当它被删除时,它似乎运行良好。

在此先感谢您提供任何帮助或见解。

【问题讨论】:

  • 为什么生成的SQL设置role为auto_increment primary key? id 是唯一的 auto_increment primary key 列有什么问题?

标签: php laravel


【解决方案1】:

integer 的第二个参数是一个自动递增标志。

public function integer($column, $autoIncrement = false, $unsigned = false)

https://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Schema/Blueprint.php#L510

【讨论】:

  • @TheRabbitFactory,我知道是前一段时间了,但是你知道我需要做什么吗,因为我和你有同样的问题
  • 我不记得了,但我想我基本上错过了第二个参数。
  • 这个答案很清楚吗?你不能设置整数字段的大小
  • MySQL's docs 更清楚地表明整数数据类型的大小是预先设置的。但是,当您查看 CREATE TABLE 代码时,您很可能会看到类似 INT(10) 的内容,但这似乎是一种常规操作,因为最大/最小有符号和无符号值有 10 位。
【解决方案2】:
$t->integer('role', false);

这样就解决了。

【讨论】:

  • 你能解释一下为什么会修复它吗?
  • 回答不解释是没有用的。
  • 通过将整数设置为 false 我禁用自动增量这就是我们绕过错误的原因。
【解决方案3】:

整数的长度属性是不允许的。删除它并尝试。

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2018-05-07
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多