Laravel: после миграции он не создает настраиваемый столбец первичного ключа в MySQL

Вот проблема: я пытаюсь создать очень простой пользовательский 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'

    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
611
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны фактически создать поле ... вы устанавливаете несуществующее поле uid в качестве первичного ключа.

Вам нужно определить поле как некоторый тип и добавить его в таблицу. Blueprint@primary устанавливает индекс (в общих чертах), а не создает поле.

Сначала вам нужно создать поле при миграции:

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

Затем установите его в своем классе модели

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

    ...

}

Другие вопросы по теме