首页 > 解决方案 > 在 laravel 5.8 中按另一个用户对用户进行分组

问题描述

我有这张桌子

在此处输入图像描述

我想对收藏家进行分组并展示他们的借款人。

收藏家会员模型

在此处输入图像描述

用户控制器

public function index(Request $request)
{

    $collectorBorrowers = CollectorMember::with('collector','borrower','referral')->get();

    return view('dashboard.users.index', compact('users','profile','collector'))
            ->with('collectorBorrowers',$collectorBorrowers);
}

在我的刀片

@foreach($collectorBorrowers as $cb)
    <tr>
        {{-- <td>{{ $loop->iteration }}</td> --}}
        <td>{{ $cb->collector->name }}</td>
        <td>{{ $cb->borrower }}</td>
        <td>{{ $cb->referral->code }}</td>
    </tr>
@endforeach

这是当前的输出

在此处输入图像描述

我怎样才能使输出像这样

Collector 1
  - borrowerName 1 | referralcode
  - borrowerName 2 | referralcode
Collector 2
  - borrowerName 1 | referralcode
Collector 3
  - borrowerName 1 | referralcode
  - borrowerName 2 | referralcode
  - borrowerName 3 | referralcode

问题更新 遵循 ROMAN BOBRIK 的回答

现在这是我的 CollectorMembersController 的样子,

public function index(Request $request)
{
    $collectorBorrowers = CollectorMember::with('collector','borrower','referral')
      ->get()
      ->groupBy('name');

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

通过在我的刀片上执行此操作

@foreach($collectorBorrowers as $item)
    <tr>
        <td>{{ $item }} ---</td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
@endforeach

这是输出

在此处输入图像描述

在我的模型上,我将 hasOne 更改为 belongsTo

public function collector()
{
    return $this->belongsTo('App\User', 'collector_id','id');
}

public function borrower()
{
    return $this->belongsTo('App\User', 'borrower_id','id');
}

public function referral()
{
    return $this->belongsTo('App\Referral', 'referral_id','id');
}    

我的问题仍然存在,我怎样才能使输出看起来像这样,

Collector 1
  - borrowerName 1 | referralcode
  - borrowerName 2 | referralcode
Collector 2
  - borrowerName 1 | referralcode
Collector 3
  - borrowerName 1 | referralcode
  - borrowerName 2 | referralcode
  - borrowerName 3 | referralcode

这是 dd($collectorBorrowers);

在此处输入图像描述

非常感谢您!

标签: laravel

解决方案


我可能不完全理解您要做什么,但对我来说,您似乎可以使用更好的关系描述。而不是使用hasOne我会使用belongsToMany Laravel #Many To Many

CollectorMember您可以将方法写入模型而不是User模型,如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function collector()
    {
        return $this->belongsToMany('App\User', 'collector_members', 'borrower_id', 'collector_id');
    }

    public function borrower()
    {
        return $this->belongsToMany('App\User', 'collector_members', 'collector_id', 'borrower_id');
    }
}

这样你就可以做这样的事情

$users = App\User::all();

foreach ($user as $users) {
    foreach ($user->borrower as $borrower) {
        // echo $borrower->name;
        // echo $borrower->pivot->referral_id
    }
}

要访问引荐,您可以使用 pivot 方法,该方法使您可以访问中间表collector_members


推荐阅读