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

Laravel中传递$enquiry[]与$society[]变量至视图的方法及「Property [name] does not exist on this collection instance」报错排查

Laravel数组传参及集合报错解决方案

Hey,我来帮你理清这个问题的来龙去脉,一步步解决它~

一、先搞懂为啥会报错「Property [name] does not exist on this collection instance」

你的控制器循环逻辑里藏着两个小坑:

  • 查询条件传错了:你把单个的enquiry_id包装成了数组$ae[] = array(...),然后用这个数组去做where匹配,导致每次查询返回的是整个集合(一堆数据),而不是你要的单个记录。
  • 数组里塞了集合:$enquiry[] = DB::table(...)->get()会把每次查询的集合塞进数组,最后$enquiry变成了「集合的数组」。视图里你直接想访问$enquiry[0]->name,其实是在一个集合对象上找属性,当然会报错啦~

二、修正控制器代码,正确传递数组到视图

我们把逻辑简化,直接用单个ID查单条记录,去掉多余的中间数组:

function all_assigned_enquiries() { 
    $ass_enq = DB::table('assignedenquiries')->get(); 
    $cat = DB::table('categories')->get(); 
    
    // 先初始化空数组
    $enquiry = [];
    $society = [];
    
    // 用foreach更直观,代替for循环
    foreach ($ass_enq as $item) { 
        // 用first()获取单条记录,而不是get()返回集合
        $enquiry[] = DB::table('enquiries')->where('id', $item->enquiry_id)->first(); 
        $society[] = DB::table('societies')->where('id', $item->society_id)->first(); 
    } 
    
    // 这里传参的方式是对的,用compact()更简洁,和你原来的数组写法效果一样
    return view('assigned_enquiry_list', compact('cat', 'enquiry', 'society'));
}

三、视图里正确读取变量

因为$enquiry和$society是数组,每个元素是单条记录,所以要循环遍历访问:

{{-- 遍历 enquiry 数组 --}}
@foreach($enquiry as $eq)
    {{-- 加个判断避免查询不到记录时报错 --}}
    @if($eq)
        <p>Enquiry Name: {{ $eq->name }}</p>
    @endif
@endforeach

{{-- 遍历 society 数组 --}}
@foreach($society as $soc)
    @if($soc)
        <p>Society Name: {{ $soc->name }}</p>
    @endif
@endforeach

四、进阶优化(可选,性能更好)

如果你的项目用了Eloquent模型,建议用关联关系来替代循环查询,避免N+1查询问题,代码也更清爽:
比如在AssignedEnquiry模型里定义关联:

// AssignedEnquiry.php
public function enquiry()
{
    return $this->belongsTo(Enquiry::class, 'enquiry_id');
}

public function society()
{
    return $this->belongsTo(Society::class, 'society_id');
}

然后控制器里预加载关联:

function all_assigned_enquiries() { 
    // 预加载关联,一次性查完所有数据
    $ass_enq = \App\Models\AssignedEnquiry::with(['enquiry', 'society'])->get(); 
    $cat = DB::table('categories')->get(); 
    
    return view('assigned_enquiry_list', compact('cat', 'ass_enq'));
}

视图里直接通过关联访问属性:

@foreach($ass_enq as $item)
    <p>Enquiry: {{ $item->enquiry->name }}</p>
    <p>Society: {{ $item->society->name }}</p>
@endforeach

内容的提问来源于stack exchange,提问作者Ashhar khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:29:05