2016-08-31 6 views
1

Warum fragt Laravel nach einem Pivot-Tisch als Singular, in meinem Code? Wie repariere ich es so, dass es als Plural heißt?Laravel Pivot-Tisch nicht Plural

Datenbanktabellen

  • Benutzer (id, etc)
  • Kampagnen (id, etc)
  • campaign_users (user_id, campaign_id)

-Code

Meine Kampagne Modell und campaign_user-Modell sind ziemlich leer und werden vom Handwerker generiert. Aber hier sind meine Benutzer Bezug auf Kampagnen, in User-Modell:

public function playing_campaigns() 
    { 
     return $this->belongsToMany('Sagohamnen\campaign\campaign'); 
    } 

Here I DB aufrufen, um die Kampagnen zu erhalten, in denen der Benutzer gehören:

$user = user::with(['playing_campaigns'])->where('id', $id)->get(); 

SQL-Fehler

SQLSTATE [42S02]: Basistabelle oder View nicht gefunden: 1146 Tabelle 'sagohamnen.campaign_user' existiert nicht (SQL: campaigns. *, campaign_user. user_id als pivot_user_id, campaign_user. campaign_id als pivot_campaign_id von campaigns innere Verbindung campaign_user auf campaigns. id = campaign_user. campaign_id wo campaign_user. user_id in (1))

Antwort

1

belongsToMany nimmt einen zweiten Parameter für die Tabellennamen ...

return $this->belongsToMany('Sagohamnen\campaign\campaign', 'campaign_users'); 

Dies ist nur die Standards sind, die Laravel übernimmt unser Leben einfacher zu versuchen und machen.

+0

überprüfen Sie auch die Dokumentation hier für andere Parameter, die Sie übergeben können [Viele-zu-viele Dokumentation] (https://laravel.com/docs/5.2/eloquent-relationships#many-to-many) – Carlos

+0

Vielen Dank für die Beantwortung. Wenn man das Dokumentationsrecht versteht, sollte man kein zweites Argument hinzufügen müssen, wenn die Tabellen nach der Laravel-Konvention benannt sind. "Eloquent wird die beiden verwandten Modellnamen in alphabetischer Reihenfolge verbinden". Hm, obwohl ich das zweite Argument hinzugefügt habe, um zu sehen, ob sich etwas geändert hat. Das Ergebnis war ein leeres Array, hm. – Olof84

+0

Es ist in alphabetischer Reihenfolge und Singular, so dass Ihre Tabelle "campaign_user" sein sollte. Wenn ein leeres Array zurückgegeben wird, stellen Sie sicher, dass die Daten für die von Ihnen verwendete Benutzer-ID eingefügt wurden. Es hilft auch, das allgemeine Protokoll Ihrer DB zu aktivieren und die ausgeführten Abfragen zu überwachen und sicherzustellen, dass sie sinnvoll sind. – user3158900

Verwandte Themen