错误"调用未定义的方法stdClass :: delete()"在尝试删除Laravel中的一行时

时间:2014-06-02 12:06:33

标签: php laravel methods

我从数据库和本地存储中删除图像的方法。

public function destroy($id) {
        $image = DB::table('images')->where('id', '=', $id)->first();
        //print_r($image);
        //return 'end';
        File::delete(public_path() . '/images/gallery/thumb-' . $image->path);
        File::delete(public_path() . '/images/gallery/' . $image->path);
        $image->delete();
        return Redirect::back()
                        ->with('form_success', 1)
                        ->with('form_message', 'Image successfully deleted!');
    }

如果我尝试返回$image的值,我会:

stdClass Object ( [id] => 49 [site_id] => 1 [page_id] => [location] => gallery [alt] => [path] => 60e52a2755ffe8923d5ac1232f5d9154.jpg ) 

我的代码出了什么问题?现在我的Laravel版本是4.2.1,但我尝试将他降级到4.1.17,但没有变化。

2 个答案:

答案 0 :(得分:5)

问题是一旦你调用first(),就会执行查询并返回结果。在致电delete()之前,您必须致电first()

DB::table('images')->where('id', $id)->delete();

由于您正在使用查询构建器,因此您将看到正如您所见的stdClass对象(没有删除方法),而不是使用Eloquent时通常会获得的模型。

答案 1 :(得分:0)

根据以下内容更改您的代码,我希望您的问题能够得到解决..

public function destroy($id) {
        $query = DB::table('images')->where('id', '=', $id);
        $image = $query->first();
        //print_r($image);
        //return 'end';
        File::delete(public_path() . '/images/gallery/thumb-' . $image->path);
        File::delete(public_path() . '/images/gallery/' . $image->path);
        $query->delete();
        return Redirect::back()
                        ->with('form_success', 1)
                        ->with('form_message', 'Image successfully deleted!');
    }

first()和delete()这些函数执行代码。首先将条件分配给变量然后单独执行。谢谢