Я столкнулся со странной проблемой. Это моя миграция:
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. Любая помощь будет оценена по достоинству.
Я использую ларавель 7
что вы получаете от Calendar::first()->id?
Попробуйте удалить id из свойства $fillable вашей модели.
@lagbox я даю идентификатор первого сообщения
@porloscerrosΨ Не помогает. На самом деле я добавил «id» позже, чтобы посмотреть, исправит ли это.
это ваша точная Calendar модель? больше ничего в нем нет?
@lagbox да ничего больше
А если сделать это в два этапа? $calendar = Calendar::create($data); $calendarIds[] = $calendar->id;
@porloscerrosΨ это тоже не помогает. Это довольно странно, что происходит. Пробовал также делать $calender = new Calendar() и $calendar-save(). Другие атрибуты верны, но идентификатор по-прежнему равен 0.






Вы должны использовать в сценарии миграции:
$table->bigIncrements('id');
Сам Laravel использует $table->id(); о миграции пользователей. я не думаю, что это проблема
Итак, после долгих поисков в Google я обнаружил, что проблему вызывает наблюдатель запросов Telescope. Пришлось отключить наблюдателя. Вот ветка https://github.com/laravel/telescope/issues/289
какую версию Laravel вы используете?