Laravel:迁移后,它不会在 MySQL 中创建自定义主键列

Laravel: Once Migrating, It doesn't Create Custom Primary Key Column into MySQL

问题是:我正在尝试为我的 table Users 生成一个非常非常简单的自定义 primary key(通过覆盖函数 getKey())。当我迁移 table 时,它说:

SQLSTATE[42000]: Syntax Error or Acccess Violation: 1072 Key Column 'uid' Doesn't Exist in Table (SQL: Alter Table 'users' Add Primary Key 'users_uid_primary'('uid'))

提前感谢您的建议和更正。

编辑:迁移后,我的 table 是在 MySQL 中创建的,但没有主键列(在本例中为 'uid') .

架构:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->primary('uid');
        $table->string('username');
        $table->string('password');
        $table->timestamps();
    });
}

型号:

class User extends Model
{
    protected $primaryKey = 'uid'; //emphasize that the primary key isn't 'id'
    protected $keyType = 'string'; //p.k. holds string values
    public $incrementing = false; //then p.k. must not auto increment it
    public $timestamps = false; //no need for this one

    public function getKey() {

        return "u".rand(1000, 9999)."r"; //return something like 'u2548r'

    }
}

您必须实际创建该字段...您正在将一个不存在的字段 uid 设置为主键。

您需要将字段定义为某种类型并将其添加到 table。 Blueprint@primary 正在设置索引(一般而言)而不是创建字段。

您必须先在迁移中创建字段:

$table->string('uid')->primary();

然后在你的模型中设置它class

class User extends Model
{
    protected $primaryKey = 'uid';

    ...

}