我有以下型号;品牌,形象和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
答案 0 :(得分:5)
在您的代码中,您对获取品牌的查询禁用了软删除约束,而不是图像。请尝试以下方法:
static::restoring(function($brand) {
$brand->image()->withTrashed()->first()->restore();
});
请注意,无需获取$ brand对象,因为它会自动传递给恢复回调。