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

Laravel Blade中如何在foreach中使用两个变量?解决array_merge报错

问题描述

有两个变量,一个用于搜索功能,另一个用于从数据库根据ID显示名称。控制器代码如下:

public function recorddisplay(Request $request)
 {
    $search =$request['search'] ??"";
    if($search != "")
    {
        $covidrecord=Covidrecord::where('fullname','LIKE',"%$search%")
        ->orWhere('province','LIKE',"%$search%")
        ->orWhere('district','LIKE',"%$search%")
        ->orWhere('localgovernment','LIKE',"%$search%")->paginate(15);
    }
    else{
        $covidrecord= Covidrecord::paginate(15);
    }

    $data = compact('covidrecord','search');

     $dataCovid=DB::table('coviddeathrecord')
     ->join('district','coviddeathrecord.district','=','district.id')
     ->join('province','coviddeathrecord.province','=','province.id')
     ->join('localgovernment','coviddeathrecord.localgovernment','=','localgovernment.id')
     ->get(['coviddeathrecord.*','district.district','province.province','localgovernment.localgovernment']);

    return view('admin.dashboard.display', compact('dataCovid'))->with($data);
}

Blade视图代码如下:

@foreach(array_merge($covidrecord,$dataCovid) as $data)
            <tr>
              <td>
                <div class="d-flex px-2 py-1">
                  
                  <div class="d-flex flex-column justify-content-center">
                    {{--  <label>{{ $data->fullname }}</label>  --}}
                    <h6 class="mb-0 text-sm">{{$data->fullname}}</h6>
                    <p class="text-xs text-secondary mb-0">{{$data->gender }} ,{{$data->age }} वर्ष</p>
                  </div>
                </div>
              </td>
              <td>
                <p class="text-xs font-weight-bold mb-0">{{ $address->province }}</p>
                <p class="text-xs text-secondary mb-0">{{ $address->district }}, {{$address->localgovernment }}<br/> {{ $data->tole }}</p>
            </td>    
@endforeach

尝试使用array_merge合并两个变量时抛出错误:array_merge(): Expected parameter 1 to be an array, object given,请问如何正确在Laravel Blade的foreach中使用这两个变量?


错误原因

$covidrecord是LengthAwarePaginator对象(因为调用了paginate()方法),$dataCovid是Laravel的Collection集合对象,而array_merge()只能处理纯数组,无法直接合并Laravel的对象类型,因此触发报错。


解决方案

方案1:合并所有数据(不保留分页)

如果不需要保留搜索结果的分页功能,可以先把分页对象转成集合,再用集合的merge()方法合并两个数据集:

控制器修改

public function recorddisplay(Request $request)
 {
    $search =$request['search'] ??"";
    if($search != "")
    {
        $covidrecord=Covidrecord::where('fullname','LIKE',"%$search%")
        ->orWhere('province','LIKE',"%$search%")
        ->orWhere('district','LIKE',"%$search%")
        ->orWhere('localgovernment','LIKE',"%$search%")->paginate(15);
    }
    else{
        $covidrecord= Covidrecord::paginate(15);
    }

    // 将分页结果转为集合
    $covidCollection = $covidrecord->getCollection();
    // 合并两个集合
    $combinedData = $covidCollection->merge($dataCovid);

    return view('admin.dashboard.display', compact('combinedData', 'search'));
}

Blade视图修改

@foreach($combinedData as $data)
            <tr>
              <td>
                <div class="d-flex px-2 py-1">
                  
                  <div class="d-flex flex-column justify-content-center">
                    <h6 class="mb-0 text-sm">{{$data->fullname}}</h6>
                    <p class="text-xs text-secondary mb-0">{{$data->gender }} ,{{$data->age }} वर्ष</p>
                  </div>
                </div>
              </td>
              <td>
                <!-- 注意:原代码的$address未定义,直接使用$data关联出的字段 -->
                <p class="text-xs font-weight-bold mb-0">{{ $data->province }}</p>
                <p class="text-xs text-secondary mb-0">{{ $data->district }}, {{$data->localgovernment }}<br/> {{ $data->tole }}</p>
            </td>    
@endforeach

方案2:保留分页功能,分开遍历

如果需要保留搜索结果的分页,同时显示$dataCovid的数据,可以分开遍历两个数据集:

<!-- 遍历分页的搜索结果 -->
@foreach($covidrecord as $data)
            <tr>
              <td>
                <div class="d-flex px-2 py-1">
                  
                  <div class="d-flex flex-column justify-content-center">
                    <h6 class="mb-0 text-sm">{{$data->fullname}}</h6>
                    <p class="text-xs text-secondary mb-0">{{$data->gender }} ,{{$data->age }} वर्ष</p>
                  </div>
                </div>
              </td>
              <td>
                <p class="text-xs font-weight-bold mb-0">{{ $data->province }}</p>
                <p class="text-xs text-secondary mb-0">{{ $data->district }}, {{$data->localgovernment }}<br/> {{ $data->tole }}</p>
            </td>    
@endforeach

<!-- 遍历$dataCovid的数据 -->
@foreach($dataCovid as $data)
            <tr>
              <td>
                <div class="d-flex px-2 py-1">
                  
                  <div class="d-flex flex-column justify-content-center">
                    <h6 class="mb-0 text-sm">{{$data->fullname}}</h6>
                    <p class="text-xs text-secondary mb-0">{{$data->gender }} ,{{$data->age }} वर्ष</p>
                  </div>
                </div>
              </td>
              <td>
                <p class="text-xs font-weight-bold mb-0">{{ $data->province }}</p>
                <p class="text-xs text-secondary mb-0">{{ $data->district }}, {{$data->localgovernment }}<br/> {{ $data->tole }}</p>
            </td>    
@endforeach

<!-- 显示分页链接 -->
{{ $covidrecord->links() }}

额外提示

  1. Laravel集合自带merge()方法,专门用于合并集合,比array_merge()更适配框架内的数据类型。
  2. 如果两个数据集的字段结构不一致,遍历前可以用isset($data->字段名)做判断,避免属性不存在的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:45:14