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?
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
auchBelongTo
A
?A
hat eineb_id
Spalte. In diesem Fall kann ichA.belongsTo(b)
oder verwendenB.hasOne(A)
. In beiden Fällen wird ORMb_id
zurA
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 eineA
. Dann müssten Sie etwas tun,A::find($id)->B
das dieseA.belongsTo(b)
Beziehung verwendet. Umgekehrt, wenn Sie nach einem fragen müssen,A
aber alles, was Sie hatten, ist die ID für einB
, dann brauchen Sie dieB.hasOne(A)
BeziehungB::find($id)->A
.Der Hauptunterschied ist wie folgt:
belongsTo
undbelongsToMany
- Sie sagen Laravel, dass diese Tabelle den Fremdschlüssel enthält, der sie mit der anderen Tabelle verbindet.hasOne
undhasMany
- Sie sagen Laravel, dass diese Tabelle keinen Fremdschlüssel enthält.quelle
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.
quelle