【问题标题】:Cannot use object of type stdClass as array Laravel Error不能使用 stdClass 类型的对象作为数组 Laravel 错误
【发布时间】:2019-12-11 21:16:14
【问题描述】:

因此,当我尝试使用数组从数据库中检索数据时,出现此错误“无法使用 stdClass 类型的对象作为数组”

我的控制器

public function openingPage($id) {

      $this->getCaseData($id);

      return view('caseopener', ['cases' => $cases]);

    }

    private function getCaseData($id) {
        $cases = DB::table('cases')->where('id', $id)->first();
        $data = @$cases[0] ? $cases[0] : array();
        if(isset($data->items)) {
            $data->items = json_decode($data->items, true);
        }

        $this->data = $data;
    }

我也看到问题出在这一行:

 $data = @$cases[0] ? $cases[0] : array();

【问题讨论】:

  • 使用 first() 从 Laravel 查询构建器中检索一行将返回一个对象,更具体地说是一个 PHP stdClass 实例(因此出现错误消息)。但是,您正试图通过 $cases[0] 访问数组的第一项。如果你调用get() 而不是first() 你会得到一个数组,那么你的代码就会像你期望的那样工作。如果您想使用first(),那么您不需要$data 分配,只需将结果分配给$case(单数)变量,条件应为if (!is_null($case)),以确保您从数据库。

标签: php laravel controller laravel-5.8


【解决方案1】:

您没有为要返回视图的$cases 变量分配任何内容。所以在这一行:

 $this->getCaseData($id);

您调用下面设置$this->data 的函数,但它不会在openingPage() 方法中的任何位置分配$case。然后,当您使用名为“cases”的变量返回视图时,它没有要发送的内容:

return view('caseopener', ['cases' => $cases]);

要么分配变量 $cases:$cases = $this->getCaseData($id);,要么返回类变量:

return view('caseopener', ['cases' => $this->data]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2012-01-19
    相关资源
    最近更新 更多