Laravel Eloquent忽略多态关系中的变异子

时间:2018-07-24 15:43:18

标签: php laravel eloquent

我有一个模型Image和一个模型MetadataMetadata可以属于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');

1 个答案:

答案 0 :(得分:1)

您可以使用未记录的morphOne关系。

并且$image->metadata->update(..)应该可以工作。