#laravel #eloquent
#laravel #красноречивый
Вопрос:
Я столкнулся со странной проблемой. Это моя миграция:
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;
}
}
При использовании метода create он успешно создает новую запись в базе данных, однако он возвращает и идентификатор 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()
метод, и он также возвращает идентификатор как 0. Любая помощь будет оценена.
Комментарии:
1. какую версию Laravel вы используете?
2. Я использую laravel 7
3. что вы получаете от
Calendar::first()->id
?4. Попробуйте удалить
id
$fillable
свойство from в вашей модели5. @lagbox I действительно дает идентификатор первого сообщения
Ответ №1:
Итак, после долгих поисков в Google я выяснил, что проблема была вызвана Telescope query watcher. Мне пришлось отключить наблюдателя. Вот эта нить https://github.com/laravel/telescope/issues/289
Ответ №2:
Вы должны использовать в сценарии миграции:
$table->bigIncrements('id');
Комментарии:
1. Сам Laravel использует $table->id(); при миграции пользователей. Я не думаю, что это проблема