Laravel:class stdClass 的对象无法转换为字符串

Laravel : Object of class stdClass could not be converted to string

我是使用 Laravel 的初学者,在这种情况下,我将从数据库中获取数据(价格),然后将其定义为变量($price)以供进一步处理。

问题是当我定义变量 $price 并尝试回显它以测试结果时,它发生了一个名为 "Object of class stdClass could not be converted to string" 的错误。

这几天想办法解决问题,发现数据库的结果有问题。它更改为 class stdClass 的对象而不是数组?但是,当我使用我在互联网上找到的所有解决方案时,它仍然不起作用......

我已经尝试过的解决方案:

$array = json_decode(json_encode($price), true);

$price = array();

->toArray(); //Used in my code

下面是我的Controller.blade.php

 /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \App\Menu  $menu
         * @return \Illuminate\Http\Response
         */
        public function update(Request $request, $day)
        {

            $opt1 = $request->post('dishopt1');

            $price1 = DB::table('dishes')->select('price', 'chg_porridge')->where([
                ['name', '=', $opt1],
            ])->get()->toArray();

            $price1 = $price1[0];

            echo $price1;

        }

您可以使用方法 value()

避免所有这些操作
/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \App\Menu  $menu
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $day)
{

    $opt1 = $request->post('dishopt1');

    $price1 = DB::table('dishes')->where([
        ['name', '=', $opt1],
    ])->value('price');

    echo $price1;

}
$price1 = DB::table('dishes')->select('price', 'chg_porridge')->where([
                ['name', '=', $opt1],
            ])->get();        
$values = json_decode(json_encode($price1), true);

DB::table()->get() return 是 StdClass 的集合(参见:What is stdClass in PHP?) object and that is why you have an object as result when you picked the first one (See: Laravel Query Builder - Retrieving Result)。

好吧,这是 Laravel 有意为之的。它要么简单地使用 (array)$price1 转换响应,要么使用 Illuminate\Contracts\Routing\ResponseFactory 接口的 ->json() 方法,这使得你的 return 像这样:

return response()->json($price1);

NB:

  • 你不需要使用 get() 然后转换为数组并检索第一项,你可以简单地做 ->first() 而不是 get() 然后你有第一个 StdClass对象。
  • 您也可以使用 Eloquent model,它会在从数据库中检索时将其转换为 Response 兼容值。
  • 您可以 return 您的值而不是使用 echo。 Laravel 会为你施展魔法。
  • 要测试一个值,您还可以使用 dd() - dump and die 或 dump()