当我尝试使用 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”的主要内容,如果未能解决你的问题,请参考以下文章

从 Blade 中的别名类获取完全限定的类名

当我尝试在我的项目 laravel 6.x 上使用 redis 时,它会显示此错误消息

如何从 JPA 中的本机查询中提取别名

如何从 laravel 中的某个路由页面检索图像或文件?

如何在laravel eloquent中为左连接表起别名

安装数据表类时找不到