Support the ongoing development of Laravel.io →
Database Eloquent Architecture

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)

Last updated 3 years ago.
0

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

Last updated 3 years ago.
0

Sign in to participate in this thread!

PHPverse

Your banner here too?

SebSept sebsept Joined 20 Feb 2014

Moderators

We'd like to thank these amazing companies for supporting us

Your logo here?

Laravel.io

The Laravel portal for problem solving, knowledge sharing and community building.

© 2025 Laravel.io - All rights reserved.