Hi
Models : There is Party (should be renamed 'game') User can register to Party then user has a registrationStatus (pending, confirmed, ...) for a Party. (so he could have a different registrationStatus for another Party)
So I created a pivot table with (party_id, user_id, registration_status_id).
I coded some stuff that does the job, but maybe we can have cleaner code...
<?php
class Party extends Eloquent {
public function players()
{
// we can no more user ->players but must use ->players().
$relation = $this->belongsToMany('User');
$players = $relation->get();
$this->assignPlayersRegistrationStatus($players);
return $players;
// return $this->belongsToMany('User');
}
protected function assignPlayersRegistrationStatus(Illuminate\Database\Eloquent\Collection &$players)
{
$registration_status_ids = DB::table('party_user')
->where('party_id','=',$this->id)
->lists('registration_status_id', 'user_id');
// dd($registration_status_ids);
foreach($players AS $p) {
$p->registration_status = RegistrationStatus::find( $registration_status_ids[$p->id] );
}
}
}
So now we can use
$party->players()[x]->registrationStatus
Can it better coded ? (relations)
Improvement :
class Party extends Eloquent {
public function players()
{
$relation = $this->belongsToMany('User')->withPivot('registration_status_id');
$players = $relation->get();
foreach($players as &$p) {
$p->registration_status = RegistrationStatus::find( (int) $p->pivot->registration_status_id );
}
return $players;
}
}
but function still returns a collection, not a Relation object. So still can't use Party::find(2)->players[0]->registration_status->name; but Party::find(2)->players()[0]->registration_status->name
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community