Pivot table as main focus

Posted 1 year ago by ThePoet444

ok, using laravel 5.4, I have 3 models. Team, User, and positions. User can belong to many teams, teams can have many users. Both can have many positions.

Teams:
ID
name
slots  //max number of users on said team

user:
id
name

positions:
id
team_id
user_id
slot
title  //nullable field 

I was originally calling Positions and then eager loading both team and user. Then after thought, I realized positions was just a pivot table with a fancy name. So then I adjusted my relationship code to this:

team:
public function user()
    {
        return $this->belongsToMany(User::class, 'positions')
            ->withPivot('slot', 'title')
            ->withTimeStamps();
    }

So now I have to display a team with all it's users in their correct spot and display empty spaces.

team controller:
public function show(team $team)
    {
        $positions = Position::where('team_id', $team->id)->orderBy('slot', 'asc')->get()->keyBy('slot');

        return view('team.show', [
            'team' => $team,
            'positions' => $positions
        ]);
    }


team/show.blade:
 @for($i=1; $i<=$team->slots; $i++)
    @if((!empty($positions[$i])) && ($positions[$i]->slot == $i))
        <tr>
            <td>{{$i}}</td>
            <td>{{$positions[$i]->user->name}}</td>
            <td>{{$positions[$i]->title ?: ''}}</td>
        </tr>
    @else
        <tr>
            <td>{{$i}}</td>
            <td></td>
            <td></td>
        </tr>
    @endif 
@endfor 

I can't help but think that I'm either over complicating this, or there's a better way. If what I'm doing is fine, why do I keep looking over it thinking that it's wrong? It works, and displays everything how I want, but still. I wonder what improvements I could make.

I tried making a Positions model that extended Pivot instead of model, but I realized I couldn't call it like a regular model (I can in laravel 5.5 though). So for now positions is just a regular model that belongsto bot User and Team.

PS. Thank goodness for StackEdit so I know my code is formatted correctly without constantly editing.

Please sign in or create an account to participate in this conversation.

Reply to

Use Markdown with GitHub-flavored code blocks.