我有一个模型
Image
一个模型
Metadata
.
元数据
可以属于
图像
,但它也可以属于其他模型,因此我使用多态关系:
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');