从 laravel 中的 groupBy 获取行 ID

Posted

技术标签:

【中文标题】从 laravel 中的 groupBy 获取行 ID【英文标题】:get the row id from a groupBy in laravel 【发布时间】:2020-02-26 18:25:56 【问题描述】:

我有一个 groupBy 数据正在工作,但我想知道如何获取嵌套记录的行 ID?

来自我的索引函数

public function index(Request $request)

    $collectorBorrowers = CollectorMember::get()
      ->groupBy('collector.name');


return view('dashboard.collector-members.index', compact('collectorBorrowers'));

这是我的收藏家成员的桌子

这是我在刀片上显示 groupBy 的方式

@foreach ($collectorBorrowers as $collector => $users_list)
    <tr>
        <th colspan="5"
            style="background-color: #F7F7F7"> $collector : ( $users_list->count()  borrowers)</th>
    </tr>
    @foreach ($users_list as $user)
        <tr>
            <td><div class="profile-side-img rounded-circle" style="background:url( url('/storage/avatars/'.$user->borrower['avatar']) );"><br/></div></td>
            <td><a href="/dashboard/users/ $user->borrower['id'] " target="_blank"> $user->borrower['name'] </a></td>
            <td> $user->borrower['email'] </td>
            <td>+ $user->borrower['country_code']  $user->borrower['phone_number'] </td>
            <td>
                @if ($user->borrower['email_verified_at'])
                    <button class="btn btn-success btn-sm trans" data-toggle="tooltip" title="Email Verified"><i class="fas fa-at"></i></button>
                @else 
                    <button class="btn btn-light btn-sm trans"><i class="fas fa-at"></i></button>
                @endif

                @if ($user->borrower['phone_verified_at'])
                    <button class="btn btn-success btn-sm trans" data-toggle="tooltip" title="Phone Number Verified"><i class="fas fa-mobile-alt"></i></button>
                @else
                    <button class="btn btn-light btn-sm trans"><i class="fas fa-mobile-alt"></i></button>
                @endif
            </td>
            <td></td>
            <td>
            !! Form::open([
                'method'=>'DELETE',
                'url' => ['/dashboard/collector-members', $users_list],
                'style' => 'display:inline'
            ]) !!
                !! Form::button('<i class="fas fa-trash-alt" aria-hidden="true"></i>', array(
                        'type' => 'submit',
                        'class' => 'btn btn-custom-danger btn-sm trans',
                        'title' => 'Remove user',
                        'onclick'=>'return confirm("Confirm delete?")',
                        'data-toggle' => 'tooltip',
                        'data-original-title' => 'Edit'
                )) !!
            !! Form::close() !!                                             
            </td>
        </tr>
        -- dd($users_list) --
    @endforeach
@endforeach

这给了我这个输出

一切正常,我唯一关心的是收集器成员表中的行 ID,以便我可以从特定收集器中删除记录。

有可能吗?谢谢!

更新:

public function index(Request $request)

    $collectorBorrowers = CollectorMember::get()
        ->keyBy('id')
        ->groupBy('collector.name');

    dd($collectorBorrowers);

【问题讨论】:

【参考方案1】:

分组前尝试按行ID进行key集合:

https://laravel.com/docs/5.8/collections#method-keyby

$collectorBorrowers = CollectorMember::get()
      ->keyBy('id')
      ->groupBy('collector.name');

然后在你看来遍历这样的组:

@foreach ($users_list as $key => $user)
      ...
      !! Form::open([
            'method'=>'DELETE',
            'url' => ['/dashboard/collector-members', $key],
      ]) !!
      ...
@endforeach

附:避免使用表单助手,因为它已被弃用。

Why are Form and html helpers deprecated in Laravel 5.x?

【讨论】:

再次感谢@romanbobrik。但是在@foreach ($users_list as $key =&gt; $user) 上添加 $key 只需给我一个嵌套 foreach 数据的序列号,例如0,1,2,3,4,5。 嗯。你能显示keyed $collectorBorrowers的转储吗? 我想我明白了。我只需要输入 $user->id。非常感谢@roman

以上是关于从 laravel 中的 groupBy 获取行 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 8 中使用 PostgreSQL 中的子查询通过 group by 子句获取行值?

如何为 Laravel ORM 中每个组中的单个项目执行 groupBy()

groupBy 在 laravel 中具有雄辩的关系

使用 group by 和 Laravel 获取最新行

无法从 DB,Laravel 获取行

在Laravel中获取具有不同外国ID的列中的最大值