Группировать пользователей другим пользователем в laravel 5.8 - PullRequest
0 голосов
/ 29 октября 2019

У меня есть эта таблица

enter image description here

Я хочу сгруппировать коллекторов и отобразить их заемщиков.

Модель CollectorMember

enter image description here

КОНТРОЛЛЕР ПОЛЬЗОВАТЕЛЯ

public function index(Request $request)
{

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

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

в My Blade

@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

Вот токовый выход

enter image description here

Как я могу сделать такой вывод

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

ОБНОВЛЕНИЕ ВОПРОСА После ответа РОМАНА БОБРИКА

Теперь вот мой 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

Вот вывод

enter image description here

На моеммодель, которую я изменяю hasOne на toto

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

Вот дд ($ collectorBorrowers);

enter image description here

Большое спасибо в advaсть!

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Возможно, я не совсем понимаю, что вы пытаетесь сделать, но мне кажется, что вы могли бы использовать лучшее описание отношений. Вместо использования 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
    }
}

Чтобы получить доступ к рефералу, вы можете использовать метод сводки, который дает вам доступ к промежуточной таблице collector_members.

1 голос
/ 29 октября 2019

Попробуйте сгруппировать коллекцию после получения данных из базы данных:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...