【问题标题】:Error "Call to undefined method stdClass::delete()" while trying delete a row in Laravel尝试在 Laravel 中删除一行时出现错误“调用未定义的方法 stdClass::delete()”
【发布时间】:2016-05-27 19:41:09
【问题描述】:

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

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,但没有任何变化。

【问题讨论】:

    标签: php laravel methods


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,它对我来说很好用。但是,如果我需要获取此 $image 的值并在某些操作后将其删除?我需要进行 2 次查询?
    • 是的,一个用于选择,一个用于删除。我不认为有一个查询可以同时选择和返回结果并一次性删除记录。
    • 为什么?我想删除第一个而不是每场比赛
    【解决方案2】:

    根据以下修改你的代码,我希望你的问题会得到解决..

    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()这两个函数执行代码。所以先把你的条件赋值给一个变量,然后分别执行。谢谢

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2012-04-02
      • 1970-01-01
      • 2019-10-20
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多