目前正在进行一个研究项目,在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);
这应该可以为您获取数据,并且能够在不崩溃的情况下处理数据库中找不到数据的情况。
我希望它能有所帮助!