I 3-Tabellen, eine news
Tabelle Geschäft Nachrichten, songs
Tabelle speichert Lieder, comments
Tabelle speichern Kommentare, eine Nachricht kann viele Kommentare haben, und ein Lied kann auch viele Kommentare, in meinem comments
Tisch, Ich verwende item_id
, item_type
, um zu ermitteln, zu welchem übergeordneten Modell dieser Kommentar gehört. Wenn z. B. item_type='game' and item_id=1
dieser Kommentar zu game
Tisch- und Spiel-ID = 1 gehört. Hier sind meine Modellcodes.eloquent belongsTo Beziehungstabelle bestimmt
Song
class Song
{
public function comment()
{
return $this->hasMany(Comment::class, 'item_id', 'id')->where('comments.item_type', '=', Comment::SONG_COMMENT_TYPE);
}
}
Nachrichten
class News
{
public function comment()
{
return $this->hasMany(Comment::class, 'item_id', 'id')->where('comments.item_type', '=', Comment::NEWS_COMMENT_TYPE);
}
}
Kommentar
class Comment
{
public function song()
{
return $this->belongsTo(Song::class, 'item_id', 'id');
}
public function news()
{
return $this->belongsTo(News::class, 'item_id', 'id');
}
}
Es ist einfach, Kommentare von Song
oder News
Modell zu bekommen, aber ich weiß nicht, wie das Gegenteil definieren Beziehung, ist es möglich, eine Methode inzu definieren 210 Modell wie:
public function item()
{
if ($this->item_type == Comment::SONG_COMMENT_TYPE) {
return $this->song();
} else {
return $this->news();
}
}
Oder vielleicht in der falschen Art und Weise ich denke, wie eloquent zu verwenden, um zu bestimmen, welche Tabelle zur Laufzeit verbinden?
Es sieht aus wie Laravel keine Rückseite für polymorphe Beziehung (korrigiert mich wenn ich falsch liege) hat. Ich denke, diese Lösung ist gut für das, was Sie erreichen wollen. –
@ThomasVanderVeen Ich bin immer noch auf der Datenbank Design-Bühne für meine App, haben Sie irgendwelche Ratschläge für mein Problem? – xcaptain
Sie müssen eine Methode für jede Beziehung im 'Kommentar'-Modell definieren, soweit mir bekannt ist. – haakym