Красноречивый метод создания, возвращающий «id» 0 после сохранения данных

Я столкнулся со странной проблемой. Это моя миграция:

Schema::create('calendars', function (Blueprint $table) {
    $table->id();
    $table->string("start");
    $table->string("end");
    $table->foreignId("learner_id")->constrained()->cascadeOnDelete();
    $table->foreignId("driving_instructor_id")->nullable()->constrained()->cascadeOnDelete();
    $table->foreignId("event_type_id")->constrained()->cascadeOnDelete();
    $table->foreignId("licence_class_id")->constrained()->cascadeOnDelete();
    $table->text("description")->nullable();
    $table->timestamps();
});

Это моя модель:

class Calendar extends Model
{
    use SoftDeletes;

    protected $fillable = [
        "id",
        "start",
        "end",
        "learner_id",
        "driving_instructor_id",
        "event_type_id",
        "licence_class_id",
        "description",
    ];

    protected $appends = ["title"];

    public function eventType()
    {
        return $this->belongsTo(EventType::class);
    }

    public function learner()
    {
        return $this->belongsTo(Learner::class);
    }
    public function transaction()
    {
        return $this->hasOne(Transaction::class);
    }

    public function drivingInstructor()
    {
        return $this->belongsTo(DrivingInstructor::class);
    }

    public function licenceClass()
    {
        return $this->belongsTo(LicenceClass::class);
    }

    public function getTitleAttribute()
    {
        return $this->learner->full_name;
    }
}

При использовании метода создания он успешно создает новую запись в базе данных, однако возвращает идентификатор 0.

$calendarIds[]=(Calendar::create($data))->id;

Переменная $data содержит:

array:12 [
  "title" => ""
  "start" => "2020-11-30T23:00:00.000Z"
  "startTimezone" => ""
  "end" => "2020-11-30T23:00:00.000Z"
  "endTimezone" => ""
  "recurrenceRule" => ""
  "recurrenceException" => ""
  "isAllDay" => true
  "description" => ""
  "driving_instructor_id" => 3
  "event_type_id" => 1
  "licence_class_id" => 1
]

Я никогда раньше не сталкивался с этой проблемой. Когда я делаю то же самое с tinker, он возвращает правильный идентификатор. Я также пробовал использовать метод $calendar->save(), и он также возвращает id как 0. Любая помощь будет оценена по достоинству.

какую версию Laravel вы используете?

lagbox 12.12.2020 06:14

Я использую ларавель 7

Ashok 12.12.2020 06:20

что вы получаете от Calendar::first()->id?

lagbox 12.12.2020 06:25

Попробуйте удалить id из свойства $fillable вашей модели.

porloscerros Ψ 12.12.2020 06:32

@lagbox я даю идентификатор первого сообщения

Ashok 12.12.2020 06:37

@porloscerrosΨ Не помогает. На самом деле я добавил «id» позже, чтобы посмотреть, исправит ли это.

Ashok 12.12.2020 06:37

это ваша точная Calendar модель? больше ничего в нем нет?

lagbox 12.12.2020 06:39

@lagbox да ничего больше

Ashok 12.12.2020 06:44

А если сделать это в два этапа? $calendar = Calendar::create($data); $calendarIds[] = $calendar->id;

porloscerros Ψ 12.12.2020 06:44

@porloscerrosΨ это тоже не помогает. Это довольно странно, что происходит. Пробовал также делать $calender = new Calendar() и $calendar-save(). Другие атрибуты верны, но идентификатор по-прежнему равен 0.

Ashok 12.12.2020 07:37
Стоит ли изучать 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-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
10
446
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны использовать в сценарии миграции:

$table->bigIncrements('id');

Сам Laravel использует $table->id(); о миграции пользователей. я не думаю, что это проблема

Ashok 12.12.2020 06:21
Ответ принят как подходящий

Итак, после долгих поисков в Google я обнаружил, что проблему вызывает наблюдатель запросов Telescope. Пришлось отключить наблюдателя. Вот ветка https://github.com/laravel/telescope/issues/289

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