2017-06-19 2 views
1

Ich habe ein Problem mit der Implementierung einiger Datenbank-ERs in Laravel. Das Problem besteht sowohl für die Beziehungen "1-1" als auch für "1-N".Eins-zu-viele-Beziehung mit zusätzlichen Feldern in Laravel

Das Beispiel unten ist ziemlich einfach, denke ich.

Wir haben ein "Team" Und ein "Player"

One Team hat viele Spieler. Das Problem kommt, wenn ich zusätzliche Informationen für diese Beziehung aufbewahren muss.

wäre ein Beispiel „Der Spieler spielt für das Team von DATE_1 zu Datum_2“ sein.

In diesem Beispiel scheint es, dass wir eine zusätzliche Tabelle benötigen, um diese Art von Informationen zu behalten. Wie ich weiß, verwendet Laravel keine Pivot-Tabellen für "1-1" oder "1-N".

Also, wie würden wir diesen Fall den Laravel Weg implementieren ..?

Antwort

1

Dies ist ein schwieriger. Aber ich würde eine weitere Tabelle mit dem Namen player_records hinzufügen. Mit folgenden Attributen

player_id 
team_id. 
start_date 
end_date 

In jedem Modell hätte ich Helfer-Methoden, um zum Beispiel aktive Spieler zu bekommen.

Hier ist das Team-Modell.

class Team extends Model 
{ 

    public function playerRecords() { 
     return $this->hasMany(PlayerRecord::class); 
    } 

    public function activePlayers() { 
     return $this->playerRecords()->where('start_at', '<=', Carbon::now())->where('ends_at', '>=', Carbon::now())->with('player')->get()->pluck('player'); 
    } 
} 

Hier ist der Spieler Modell

class Player extends Model 
{ 

    public function playerRecords() { 
     return $this->hasMany(PlayerRecord::class); 
    } 

} 

Und hier ist das PlayerRecord Modell

class PlayerRecord extends Model 
{ 

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

} 
+0

Sie Edvard Vielen Dank für die Beantwortung. Ich kann deine Punkte sehen. Ich habe jedoch eine Frage. Auf diese Weise machen wir jedes Mal, wenn wir den PlayerRecord benötigen, eine zusätzliche Abfrage (die nicht zu viel ist!). Ist das der beste Weg zu gehen? –

+0

Eine zusätzliche Abfrage in der Tat. Aber ich kann im Moment keine bessere Lösung finden. –

Verwandte Themen