当我尝试使用 Laravel 中的“别名”从数据库中获取值时如何修复“未定义的偏移量:0”
Posted
技术标签:
【中文标题】当我尝试使用 Laravel 中的“别名”从数据库中获取值时如何修复“未定义的偏移量:0”【英文标题】:How to fix "Undefined offset: 0" when I trying' to get value from database using "aliases" in Laravel 【发布时间】:2019-09-09 01:02:28 【问题描述】:当我尝试使用别名“as”从数据库中获取值时,出现如下错误:
在 HandleExceptions->handleError(8, '未定义的偏移量: 0', '/data/gui/hum/hum.v3.1/vendor/laravel/framework/src/Illuminate/Support/Collection.php', 1570,数组('key' => 0))
我试图将存储在临时变量中的数据更改为数组。我使用来自 laravel "collect()" 的方法以对象的形式收集数据。
这是我获取数据并返回视图以从数据库中获取数据使用情况的函数。
$dtusagearray = DB::select(DB::raw(" select
sum.msisdn msi,
sum.imsi ims,
sum.customer_status st,
sum.grapari_name grp,
substr(sum.customer_group,1,3) cg,
sum.regional_name reg,
sum.billperiod eop,
sum.totalcharge tch,
to_char(sum.totalcharge,'999,999,999,999') tc,
to_char(sum.riskscore,'999,999,999,999') cr,
to_char(sum.billingavg,'999,999,999,999') avb,
to_char(sum.billingmax,'999,999,999,999') mab,
to_number(to_char(sum.lastcall,'DD')) day,
to_char(ceil(sum.billingavg/(ceil(to_number(to_char(sum.lastcall,'DD'))))),'999,999,999,999') avchday,
to_char(sum.lastcall,'dd/mm/yyyy hh24:mm:ss') lc,
(select count(msisdn) from actions a where a.msisdn=sum.msisdn and a.billperiod=sum.billperiod and a.actiontype='5') jml_call,
(select count(msisdn) from actions a where a.msisdn=sum.msisdn and a.billperiod=sum.billperiod and a.actiontype='3') jml_sms,
(select count(msisdn) from actions a where a.msisdn=sum.msisdn and a.billperiod=sum.billperiod and a.actiontype='2') jml_adj,
(select count(msisdn) from actions a where a.msisdn=sum.msisdn and a.billperiod=sum.billperiod and a.actiontype='1') jml_blk,
nvl(sum.roam_name, sum.lastroam) lr
from master_ip333_charge sum
where sum.msisdn = '62'||'$msisdn'
order by sum.billperiod asc
这就是我尝试从对象转换数据并返回视图以显示结果的方式
$dtusagearray = collect($dtusagearray);
$dtusage = $dtusagearray[0];
return view('customerprofile', compact('dtusage'));
此函数的输出是根据查询的计算结果显示客户使用数据。
【问题讨论】:
[0]
应该做什么?拿到第一个项目?我认为该系列有一种方法
@Don'tPanic 确实如此;你可以做collect(...)->first()
,这将返回第一个值或null
,如果没有设置。 collect(...)[0]
仍然有效,但您需要通过 isset()
手动检查。话虽如此,$dtusagearray
缺少一个闭包,例如->get()
(转换为Collection
)或->first()
,它完全绕过Collection
,只返回第一条记录(或null
)。
"Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset" using PHP的可能重复
是的,正确的。但是,当我尝试'方法 first() 时,我再次遇到错误,我不能使用方法 first(),因为获取的数据不仅在第一行。将显示所有行
【参考方案1】:
您可以将数据转换为数组,看看是否可以访问偏移量 0。
你的代码会是这样的:
$dtusagearray = (array) $dtusagearray;
$dtusage = $dtusagearray[0];
return view('customerprofile', compact('dtusage'));
【讨论】:
以上是关于当我尝试使用 Laravel 中的“别名”从数据库中获取值时如何修复“未定义的偏移量:0”的主要内容,如果未能解决你的问题,请参考以下文章