You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS解析数据返回非对象空结果 Laravel读取$user_wallet属性报错如何解决

问题修复方案

错误根因

你遇到的Trying to get property 'balance' of non-object报错,本质原因不是$user_wallet->balance为null,而是**$user_wallet变量本身就是null**。你在null值上直接访问balance属性的操作,会先于你写的外层空合并运算符执行,直接触发报错,所以之前的调整没有生效。

修复代码

你需要先判断$user_wallet是否存在,再访问它的属性,调整后的完整JS代码如下:

$(document).on('click', '#custombtn', function(e) {
    e.preventDefault();
    let form = $(this).parents('form');
    swal(
        {
            title: "Alert!",
            // 此处优先判断$user_wallet是否存在,再访问balance属性
            text: "Youre wallet balance is: {!! $user_wallet ? digits2persian(json_decode($user_wallet->balance)) : '暂无余额' !!}",
            type: "warning",
            allowEscapeKey: false,
            allowOutsideClick: false,
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: "Yes",
            cancelButtonText: "No",
            showLoaderOnConfirm: true,
            closeOnConfirm: false
        }).then((isConfirm) => {
        if (isConfirm.value === true) {
            // 此处同步修复$user_wallet为null时访问id的报错风险
            window.location.href = {!! json_encode(route('courseRegistrationWithWallet', ['course'=>$item->cor_id,'wallet'=> isset($user_wallet) ? $user_wallet->id : ''])) !!}
        }
        return false;
    });
});

如果你使用的是PHP8及以上版本,可以用更简洁的null安全运算符写法:

// 余额展示部分写法
{!! digits2persian(json_decode($user_wallet?->balance)) ?? '暂无余额' !!}

// 路由参数部分写法
'wallet' => $user_wallet?->id ?? ''

额外优化建议

你可以在渲染视图前就对$user_wallet变量做默认值处理,比如在控制器中给不存在的钱包对象赋值一个空的默认对象,避免视图层重复写判断逻辑,代码可维护性更高。

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:27:03