Betrachten Sie zwei Modelle A
undB
A
-> relatedTo B
ist eine one to one
Beziehung
Was ist der Unterschied bei der Verwendung von (A -> hasOne
- B) und (A -> belongsTo
- B)?
Kann ich sie austauschbar verwenden?
Antworten:
Nein, der Unterschied hängt davon ab, wo sich Ihr Fremdschlüssel befindet.
Wenn in Ihrem Beispiel A
eine b_id
Spalte vorhanden ist, dann A
belongsTo
B
.
Wenn B
hat eine a_id
Spalte, dann A
hasOne
oder hasMany
B
abhängig davon, wie viele haben B
sollten.
B
auch BelongTo
A
?
A
hat eine b_id
Spalte. In diesem Fall kann ich A.belongsTo(b)
oder verwenden B.hasOne(A)
. In beiden Fällen wird ORM b_id
zur A
Tabelle hinzugefügt . Also, was ist der Unterschied hier? Würden Sie bitte erklären?
B
aber alles, was Sie haben, ist die ID für eine A
. Dann müssten Sie etwas tun, A::find($id)->B
das diese A.belongsTo(b)
Beziehung verwendet. Umgekehrt, wenn Sie nach einem fragen müssen, A
aber alles, was Sie hatten, ist die ID für ein B
, dann brauchen Sie die B.hasOne(A)
Beziehung B::find($id)->A
.
Der Hauptunterschied ist wie folgt:
belongsTo
und belongsToMany
- Sie sagen Laravel, dass diese Tabelle den Fremdschlüssel enthält, der sie mit der anderen Tabelle verbindet.
hasOne
und hasMany
- Sie sagen Laravel, dass diese Tabelle keinen Fremdschlüssel enthält.
belongstoMany
(viele-zu-viele) Beziehung hält den Schlüssel nicht auf der Tabelle selbst, sondern auf der Pivot-Tabelle.
Das Modell, dessen Tabelle den Fremdschlüssel enthält, hat Gehört zu (), während das Modell, dessen Tabelle den Primärschlüssel enthält, auf den sich dieser Fremdschlüssel bezieht, hasOne () hat ... es ist einfach, dass das Modell, das den Fremdschlüssel hat have Gehört zu () und derjenige, der den Fremdschlüssel in dieser Beziehung nicht enthält, hat hasOne (). und nein, sie sind nicht mit der falschen Methode austauschbar. Als Ergebnis wird immer null zurückgegeben.