代码按特定顺序时,不会删除文件

时间:2016-09-27 11:04:38

标签: ajax laravel-5

我遇到的问题是,当我尝试使用->delete()从数据库中删除记录时,我的代码在成功删除记录后停止。

此代码不执行Storage::delete($image)

public function productImageDelete(Request $request){
    if($request->ajax()):
        $image_id = Input::get('image-id');
        $image = Input::get('image');
        try {
            $image = Image::findOrFail($image_id);
            $image->delete();
            Storage::delete($image); //This doesn't execute at all
            return "success";
        } catch ( \Illuminate\Database\QueryException $e) {
            return $e;
        }
    endif;
}

但是当我在Storage::delete($image)之前放置$image->delete();代码时,

public function productImageDelete(Request $request){
    if($request->ajax()):
        $image_id = Input::get('image-id');
        $image = Input::get('image');
        try {
            Storage::delete($image); //This executes first
            $image = Image::findOrFail($image_id);
            $image->delete();
            return "success";
        } catch ( \Illuminate\Database\QueryException $e) {
            return $e;
        }
    endif;
}

1 个答案:

答案 0 :(得分:1)

您需要查看详细信息。您正在创建两个名为$image的变量,这就是您的问题。

在第一种情况下,您正在调用Storage::delete($image);,其中$image是一个对象,而在第二种情况下,您正在调用相同的方法,但在这种情况下,$image是一个Input::get('image')

如果您只是将Input::get('image')的变量重命名为$imageParam = Input::get('image')并执行Storage::delete($imageParam);,则它应适用于这两种情况。

底线是:永远不要使用相同的变量名称,因为它会导致这种不必要的混淆。