Mark
Mark

Reputation: 40

How to get the full Relation in Laravel/Eloquent

at the moment i try to learning Laravel and Laravel Eloquent. I try to solve a problem using relations in Laravel.

I have following Database Structure in my simple Laravel Project.

table players:
id   name
table clubs:
id   name   icon
table players_x_clubs:
player_id   club_id

it's a one to many Relation.

Is it possible to get the full club Object who is combined with the player_id?!

The first try was to add this to my Player Model

public function club()
{
    return $this->hasOne('App\PlayersXClub');
}

Here, i only get the PlayersXClub Relation with the player_id and the club_id

but i want to get the full club object from the club table, is it possible in a simple way?

any ideas how i have to realize is it correctly?

my solution was this:

public function getClubRelation()
{
    $clubRelation = $this->hasOne('App\PlayersXClub')->get()->first();
    $club = Club::whereId($clubRelation->club_id)->get()->first();
    return $club;
}

With this solution i can do this in my code $player->getClubRelation()->icon

but i don't know if its correct solved or is there a more simple way to resolve it with Eloquent?

Upvotes: 0

Views: 566

Answers (1)

Dino Numić
Dino Numić

Reputation: 1452

You always have access to objects relations. For example:

$player = Player::find(1);
$club   = $player->club;

or better

$player = Player::with('club')->find(1);

However, I believe you don't need an additional table. An additional table would result in a many to many relation which doesn't make much sense here.

A player belongs to a single club and a club can have many players. So it's one to many.

You should add a club_id foreign key to players table.

$table->unsignedBigInteger('club_id');
$table->foreign('club_id')->references('id')->on('clubs')->onDelete('cascade');

Player Class

public function club() {
   return $this->belongsTo(Club::class);
}

Club Class

public function players() {
   return $this->hasMany(Player::class);
}

Upvotes: 1

Related Questions