我有一个模型Image
和一个模型Metadata
。 Metadata
可以属于Image
,但是它也可以属于其他模型,因此我使用了多态关系:
Image.php:
public function metadata()
{
return $this->morphMany('App\Metadata', 'content');
}
Metadata.php:
public function content()
{
return $this->morphTo();
}
public function setAuthorAttribute($value)
{
$this->attributes['author'] = strtoupper($value);
}
当我想使用其元数据创建图像时,如下所示:
["author" => "Foo Bar"]
我使用以下代码:
$image = Image::create($request);
$image->metadata()->create($this->mapMetadata($request));
这很好。但是,当我尝试使用其元数据更新图像时,使用以下代码:
$image = Image::findOrFail($id);
$image->update($request);
$image->metadata()->update($this->mapMetadata($request));
数据已更新,但我的增值器被忽略。换句话说,在创建时,author
变为大写,而在更新时则不是。
编辑:元数据表的迁移:
$table->increments('id');
$table->string('author')->nullable();
$table->unsignedInteger('content_id');
$table->string('content_type');