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()
我是使用 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()