MySQL-当通过索引寻址或转换为数组失败时,如何从stdClass中提取值



目前正在进行一个研究项目,在Laravel中实现一个库。我写了一个程序来计算某本书每年被拿走的时间:

$queryString = "SELECT ReadBookTakenPeriodPerYear({$id});";
$result = DB::select($queryString);

结果,我得到了:

array (
0 => 
array (
0 => 
stdClass::__set_state(array(
'ReadBookTakenPeriodPerYear(33)' => 1.91781,
)),
),
) 

我怎样才能得到1.91781?为什么我不能通过索引访问数组,或者将sdt类转换为数组?在inet上研究解决方案,在SO上,仍然无法应对。

array (
0 => 
array (
0 => 
stdClass::__set_state(array(
'ReadBookTakenPeriodPerYear(33)' => 1.91781,
)),
),
) 

在这个返回数据中有几层不需要的嵌套。您有一个php标准对象,它是数组中的第一个也是唯一一个元素。该数组是父数组中的第一个也是唯一一个元素。目前,你应该能够得到这样的值:

$result[0][0]->ReadBookTakenPeriodPerYear(33);

您可以通过添加->first()来简化返回的数据,使其稍微简单一些。

$result = DB::select($queryString)->first();

在此处添加->first()应消除一个级别的数组。您告诉查询生成器给您第一个匹配结果,而不是所有匹配结果的集合。现在你应该能够做到:

$result[0]->ReadBookTakenPeriodPerYear(33(;

如果在数据库中找不到任何数据,请将其与laravel助手Arr::get((结合使用,以避免出现异常。https://laravel.com/docs/master/helpers#method-阵列获取

Arr::get($result, 0)->ReadBookTakenPeriodPerYear(33);

最后,Laravel helper方法optional((确保$results[0]在查找对象上的属性之前返回一个对象,以避免该级别的异常。https://laravel.com/docs/master/helpers#method-可选

optional(Arr::get($result, 0))->ReadBookTakenPeriodPerYear(33);

这应该可以为您获取数据,并且能够在不崩溃的情况下处理数据库中找不到数据的情况。

我希望它能有所帮助!

最新更新