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

Laravel中如何用foreach循环在Blade打印数组单个键值对

解决Laravel控制器传数组到Blade模板并遍历打印单个值的问题

问题分析

你的代码存在两个核心问题,导致Blade无法正确读取单个字段值:

  1. DB::get()返回的是Collection集合对象,不是普通数组,循环中每次get()还会生成新的Collection,最终$show_friend_request_Data是嵌套的集合数组,直接遍历无法拿到用户字段。
  2. 循环执行数据库查询会造成N+1性能问题,查询效率极低。

优化控制器代码

先重构查询逻辑,一次性获取所有需要的用户数据,避免循环查询:

public function show_friend_request()
{
    $user_id = auth()->user()->id;
    // 提取所有待处理请求的发送者ID数组
    $senderIds = DB::table('friendships')
        ->where('recipient_id', $user_id)
        ->where('status', 'pending')
        ->pluck('sender_id')
        ->toArray();

    // 批量查询所有发送者的用户信息
    $show_friend_request_Data = DB::table('users')
        ->whereIn('id', $senderIds)
        ->select('id', 'first_name', 'last_name')
        ->get();

    return view('pages.friend_request')->with('Active_Request', $show_friend_request_Data);
}

Blade模板正确遍历取值

现在$Active_Request是用户信息的Collection集合,直接遍历并通过字段名获取单个值:

@foreach($Active_Request as $friend)
    <li>
        <div class="rounded badge-unread d-sm-flex border-0 mb-1 p-3 position-relative">
            <!-- Avatar -->
            <div class="avatar text-center">
                <img class="avatar-img rounded-circle" src="assets/images/avatar/01.jpg" alt="{{ $friend->first_name }}">
            </div>
            <!-- Info -->
            <div class="mx-sm-3 my-2 my-sm-0">
                <p class="small mb-2"><b>{{ $friend->first_name }} {{ $friend->last_name }}</b> sent you a friend request.</p>
                <!-- Button -->
                <div class="d-flex">
                    <button class="btn btn-sm py-1 btn-primary me-2">Accept</button>
                    <button class="btn btn-sm py-1 btn-danger-soft">Delete</button>
                </div>
            </div>
        </div>
    </li>
@endforeach

兼容原有逻辑的临时写法(不推荐)

如果不想修改控制器代码,需要在Blade里处理嵌套集合,取出单个用户数据:

@foreach($Active_Request as $friendCollection)
    @php $friend = $friendCollection->first(); @endphp
    <li>
        <div class="rounded badge-unread d-sm-flex border-0 mb-1 p-3 position-relative">
            <!-- Avatar -->
            <div class="avatar text-center">
                <img class="avatar-img rounded-circle" src="assets/images/avatar/01.jpg" alt="">
            </div>
            <!-- Info -->
            <div class="mx-sm-3 my-2 my-sm-0">
                <p class="small mb-2"><b>{{ $friend->first_name }} {{ $friend->last_name }}</b> sent you a friend request.</p>
                <!-- Button -->
                <div class="d-flex">
                    <button class="btn btn-sm py-1 btn-primary me-2">Accept</button>
                    <button class="btn btn-sm py-1 btn-danger-soft">Delete</button>
                </div>
            </div>
        </div>
    </li>
@endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:25:31