我有一个简单的Laravel迁移文件,指定了一个复合主键:

// ...

public function up()
{
    Schema::create('my_super_long_table_name', function($table)
    {
        $table->integer('column_1');
        $table->integer('column_2');
        $table->integer('column_3');

        $table->primary(['column_1', 'column_2', 'column_3']);
    });
}

// ...

当运行php artisan migrate时,抛出此错误:

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'my_super_long_table_name_column_1_column_2_column_3' is too long

推荐答案

Simply specify the key name when creating it (with the second argument for primary).

$table->primary(['column_1', 'column_2', 'column_3'], 'my_long_table_primary');

Next,

如果在这次修改后出现了类似于You have an error in your SQL syntax ...的错误,请确保您的数据库引擎没有使用保留字作为密钥名.

Eg for MySQL : http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

Tip : primary is reserved, so do not use it ;)

Laravel相关问答推荐

给定的角色或权限应该使用 guard `` 而不是 `web`. -Laravel

在 laravel 4.2 中,用户 'root'@'localhost' 的 Laravel 访问被拒绝(使用密码:YES)

Laravel - 加载常见的页眉和页脚以查看

限制 Blade foreach 循环中的结果

Laravel 框架类在 PHPUnit 数据提供程序中不可用

laravel 中的 Http Post 使用 fetch api 给出 TokenMismatchException

无法安装 Laravel 包 - 干预图像

Laravel 从现有模型生成迁移

laravel 5 - assets资源 list 中未定义 css 文件?

如何卸载 Laravel?

SQLSTATE [01000]:警告:1265 列的数据被截断(truncated)

php Laravel-遇到格式不正确的数值(在字符串上)

在 AWS 上找不到 Laravel 5 类Collective\Html\HtmlServiceProvider

在 Laravel 中显示已注册的路由

如果值存在于另一个字段数组中,Laravel 验证规则

WhereHas Laravel 中的关系计数条件是什么

在 Laravel 中按用户名查找用户

Laravel 获取查询字符串

Laravel 用户能力

遍历 Laravel 控制器中的结果集