Betrachten Sie zwei Modelle AundB
A-> relatedTo Bist eine one to oneBeziehung
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 Aeine b_idSpalte vorhanden ist, dann A belongsTo B.
Wenn Bhat eine a_idSpalte, dann A hasOneoder hasMany Babhängig davon, wie viele haben Bsollten.
Bauch BelongTo A?
Ahat eine b_idSpalte. In diesem Fall kann ich A.belongsTo(b)oder verwenden B.hasOne(A). In beiden Fällen wird ORM b_idzur ATabelle hinzugefügt . Also, was ist der Unterschied hier? Würden Sie bitte erklären?
Baber alles, was Sie haben, ist die ID für eine A. Dann müssten Sie etwas tun, A::find($id)->Bdas diese A.belongsTo(b)Beziehung verwendet. Umgekehrt, wenn Sie nach einem fragen müssen, Aaber 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:
belongsTound belongsToMany- Sie sagen Laravel, dass diese Tabelle den Fremdschlüssel enthält, der sie mit der anderen Tabelle verbindet.
hasOneund 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.