2016-06-16 11 views
1

Also habe ich drei Tabellen: users, candidates und logs. Jetzt candidates hat keine eigene ID, es hat einen identifizierenden Fremdschlüssel user_id. Blick viel wie folgt aus:Laravel - Wie benutzt man einen Fremdschlüssel zu einer Tabelle mit einem identifizierenden Fremdschlüssel?

-users- 
id 
name 
etc. 

-candidates- 
user_id 
type 
etc. 

Jetzt möchte ich logs einen Tisch haben, die einen mit candidates one-to-many-Beziehung hat, ist, dass ein Kandidat null oder mehr logs haben kann. Also möchte ich einen fremden Schlüssel zu candidates, etwas wie candidate_id haben. Wenn man es so darstellt und Laravel wird die Beziehung nicht automatisch verstehen. Was soll ich den Fremdschlüssel von logs zu candidates nennen, damit Laravel die Beziehung versteht?

+0

Ist die Beziehung zwischen Benutzer und Kandidaten eine Eins-zu-Eins-Beziehung? – tkausl

+0

Ja @tkausl, ist es tatsächlich. Ein Benutzer hat jedoch nicht notwendigerweise einen Kandidaten, aber ein Kandidat hat notwendigerweise einen Benutzer. –

+0

Dann könnten Sie den Benutzer die Protokolle als Beziehung haben, die Kandidaten könnten dann ein Protokoll über den Benutzer haben ('hasManyThrough'). Es gibt keine Möglichkeit, eine Eins-zu-viele-Beziehung ohne einen Primärschlüssel auf dem "Eins" -Teil zu haben. – tkausl

Antwort

0

Ich denke, die einfachste Sache wäre, Kandidaten eine eigene inkrementelle ID zu geben und dann zwei Beziehungstabellen, candidate_user und candidate_log, zu haben. Es würde gemäß Laravel docs

+0

Die SQL-Struktur, die ich in meiner Frage beschreibe, ist nicht unlogisch oder unorthodox zu SQL ist es? Weil ich denke, dass Laravel alle gültigen SQL-Strukturen unterstützen sollte und meine Frage daher ohne eine Umgehungslösung beantwortbar sein sollte. Zustimmen? –

0

eingerichtet werden. Ihre Kandidatentabelle muss einen Primärschlüssel haben.

Es ist keine inkrementelle ID erforderlich, aber Sie sollten die Tabelle nicht ohne Primärschlüssel verlassen.

Sobald Sie einen Primärschlüssel definiert haben, können Sie ihn als Referenz verwenden.

Laravel werden versuchen, Ihren foreign_key Namen zu erraten:

https://laravel.com/docs/5.2/eloquent-relationships#one-to-many

Denken Sie daran, Eloquent wird automatisch die richtige Fremdschlüsselspalte auf dem Kommentar Modell bestimmen. Laut Vereinbarung wird Eloquent den Namen "snake case" des besitzenden Modells übernehmen und mit _id anhängen. In diesem Beispiel wird Eloquent annehmen, dass der Fremdschlüssel im Kommentarmodell post_id lautet.

Wenn Ihr Primärschlüssel nicht die „id“ -Spalte ist, sollten Sie die protected $primaryKey und die public $incrementing Eigenschaften benutzen, um Ihre Primärschlüssel in Ihrem Eloquent Modell zu beschreiben.

Verwandte Themen