Reputation: 637
I have this table
I want to group the collectors and display their borrowers.
CollectorMember Model
USER CONTROLLER
public function index(Request $request)
{
$collectorBorrowers = CollectorMember::with('collector','borrower','referral')->get();
return view('dashboard.users.index', compact('users','profile','collector'))
->with('collectorBorrowers',$collectorBorrowers);
}
in 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
Here's the current Output
How can I make the output like this
Collector 1
- borrowerName 1 | referralcode
- borrowerName 2 | referralcode
Collector 2
- borrowerName 1 | referralcode
Collector 3
- borrowerName 1 | referralcode
- borrowerName 2 | referralcode
- borrowerName 3 | referralcode
QUESTION UPDATE Following ROMAN BOBRIK's answer
Now here's my CollectorMembersController looks like,
public function index(Request $request)
{
$collectorBorrowers = CollectorMember::with('collector','borrower','referral')
->get()
->groupBy('name');
return view('dashboard.collector-members.index', compact('collectorBorrowers'));
}
By doing this on my blade
@foreach($collectorBorrowers as $item)
<tr>
<td>{{ $item }} ---</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
@endforeach
Here's the output
On my model I change the hasOne to 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');
}
My question is still remain, how can I make the output looks like this,
Collector 1
- borrowerName 1 | referralcode
- borrowerName 2 | referralcode
Collector 2
- borrowerName 1 | referralcode
Collector 3
- borrowerName 1 | referralcode
- borrowerName 2 | referralcode
- borrowerName 3 | referralcode
Here's the dd($collectorBorrowers);
Thank you so much in advance!
Upvotes: 0
Views: 114
Reputation: 2872
Try to group collection after you've got data from database:
$collectorBorrowers = CollectorMember::with('collector','borrower','referral')
->get()
->groupBy('collector.name');
https://laravel.com/docs/5.8/collections#method-groupby
Upvotes: 1
Reputation: 1732
I might not fully understand what you are trying to do, but to me it seems you could use a better relationship description. Instead of using hasOne
I would use belongsToMany
Laravel # Many To Many
Instead of the CollectorMember
Model you would write the methods to your User
Model, like so:
<?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');
}
}
This way you can do something like this
$users = App\User::all();
foreach ($user as $users) {
foreach ($user->borrower as $borrower) {
// echo $borrower->name;
// echo $borrower->pivot->referral_id
}
}
To get access to the referral you can use the pivot method, that gives you access to the intermediate table collector_members
.
Upvotes: 1