Morgan
Morgan

Reputation: 906

Where is the proper place to put a user-related function in Laravel 5.0

The relevant portion of my application is set up as follows:

A user can be on an unlimited number of teams.

I have a function to retrieve an array of the teams a given user belongs to. It would generally be called in the scope of the current logged in user to get their active teams, but will also be used in administrative functions to return the teams of a given user ID.

My first thought was to make the function callable from the user model, so for a given user object, I could do as follows

$teams = $user->get_teams();

or

$teams = User::get_teams($user_id);

But I'm not sure if this is generally considered best practice in Laravel for this type of functionality. Where should this function be located?

Upvotes: 2

Views: 55

Answers (1)

ryanwinchester
ryanwinchester

Reputation: 12127

Actually, you are talking about something that laravel already does for you if you are using Eloquent.

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'users';

    public function teams()
    {
        return $this->belongsToMany(Team::class);
    }
}

class Team extends Model
{
    protected $table = 'teams';

    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}

In addition to the users and teams table you would make a pivot table:

team_user
    id - integer
    team_id - integer
    user_id - integer

and laravel does the rest.

$userId = 1;

$user = User::with('teams')->find($userId);

$teams = $user->teams;

Upvotes: 2

Related Questions