Laravel 5:如何检索已删除的相关模型?

时间:2015-07-09 08:51:02

标签: php laravel laravel-5 laravel-5.1

我有以下型号;品牌,形象和Image_size。品牌有一个图像,图像有很多image_sizes。所有这些模型都使用软删除,删除方面很好。但是,如果我想恢复已删除的品牌,我还需要恢复相关的图像和image_size模型。

我一直在研究使用模型事件,这样当我的品牌模型被恢复时,我可以获取图像并恢复它,然后我将在图像模型中有类似的事件来获取图像大小并恢复那些。对于品牌而言,我很难获得删除的图像记录。这就是我在品牌模型中尝试做的事情:

/**
 * Model events
 */
protected static function boot() {
    parent::boot();

    /**
     * Logic to run before delete
     */
    static::deleting(function($brand) {
         $brand->image->delete();
    });

    /**
    * Logic to run before restore
    */
    static::restoring(function($brand) {
        $brand = Brand::withTrashed()->with('image')->find($brand->id);
        $brand->image->restore();
    });
}

我只是在尝试恢复映像的行上收到以下错误消息:

Call to a member function restore() on a non-object

1 个答案:

答案 0 :(得分:5)

在您的代码中,您对获取品牌的查询禁用了软删除约束,而不是图像。请尝试以下方法:

static::restoring(function($brand) {
  $brand->image()->withTrashed()->first()->restore();
});

请注意,无需获取$ brand对象,因为它会自动传递给恢复回调。