Я пытаюсь понять разницу между следующим кодом:
Image::make(['path' => $path]);
и
Image:create(['path' => $path]);
Отношения
//Image Model
/**
* @return MorphTo
*/
public function imageable(): MorphTo
{
return $this->morphTo();
}
//Post Model
/**
* @return MorphOne
*/
public function image(): MorphOne
{
return $this->morphOne(Image::class, 'imageable');
}
Итак, я провел исследование и нашел объяснение производителя и изготовителя в разделе Factory. Казалось бы, make()
создает экземпляр объекта, не сохраняя его. create()
создает и сохраняет объект сразу.
Как работает код в примере?
Выше приведен полный фрагмент кода. На этом этапе код не работает должным образом.
$post->image()->save(
Image::create([
'path' => $path,
])
);
Он выдает исключение:
SQLSTATE[HY000]: General error: 1364 Field 'imageable_type' doesn't have a default value (SQL: insert into `images` (`path`, `updated_at`, `created_at`) values (thumbnails/RYBkyxFLNzxwbI5eTnzx2w4QqzOfRAUj7h2SgXQM.jpeg, 2020-04-12 15:41:05, 2020-04-12 15:41:05))
Теперь, используя make()
, он работает. Без необходимости вручную добавлять imageable_type
и imeageble_id
. Но почему? Это я не могу понять.
$post->image()->save(
Image::make(['path' => $path])
);