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';
...
}
问题是:我正在尝试为我的 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';
...
}