Вот проблема: я пытаюсь создать очень простой пользовательский primary key (переопределив функцию getKey()) для моей таблицы Users. Когда я переношу таблицу, она говорит:
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'))
Заранее благодарим за ваши предложения и исправления.
РЕДАКТИРОВАТЬ: после миграции моя таблица создается в 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 в качестве первичного ключа.
Вам нужно определить поле как некоторый тип и добавить его в таблицу. Blueprint@primary устанавливает индекс (в общих чертах), а не создает поле.
Сначала вам нужно создать поле при миграции:
$table->string('uid')->primary();
Затем установите его в своем классе модели
class User extends Model
{
protected $primaryKey = 'uid';
...
}