在 Laravel 中更新一对一多态的最佳方法是什么?

What is the best way to update One to One Polymorphic in Laravel?

我有一对一多态,我想找到更新现有关系的最佳方式。

class Image extends Model
{
    /**
     * Get the owning imageable model.
     */
    public function imageable()
    {
        return $this->morphTo();
    }
}

class Post extends Model
{
    /**
     * Get the post's image.
     */
    public function image()
    {
        return $this->morphOne('App\Image', 'imageable');
    }
}

class User extends Model
{
    /**
     * Get the user's image.
     */
    public function image()
    {
        return $this->morphOne('App\Image', 'imageable');
    }
}

关于 PostController 中的更新方法

public function update(Request $request, $id)
{
    $post       = Post::findOrFail($id);
    $post->image()->delete();
    $post->image()->save(new Image([
        'url'=> $request->input('image_url),
    ]));
}

How to update Image Relationship without deleting it first?

谢谢

您可以尝试在关系上使用 updateOrCreate

$post->image()->updateOrCreate(
    [],
    ['url' => $request->input('image_url')]
);

如果您一直期望有一个 ImagePost 相关,您可以直接更新 Image 实例:

$post->image->update([...]);