web-dev-qa-db-de.com

Was ist der Unterschied zwischen BelongsTo und HasOne in Laravel

Kann mir jeder Körper sagen, worin der Hauptunterschied besteht
die BelongsTo und HasOne Beziehung in eloquent .

17

BelongsTo ist eine Umkehrung von HasOne.

Wir können die Umkehrung einer hasOne-Beziehung mit der Methode "tooTo" .. definieren. Nehmen Sie ein einfaches Beispiel mit den Modellen User und Phone.

Ich gebe hasOne Beziehung von Benutzer zu Telefon.

class User extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

Mit dieser Beziehung kann ich unter Verwendung des Benutzermodells Daten zum Telefonmodell abrufen.

Bei inversen Prozessen mit HasOne ist dies jedoch nicht möglich. Wie Access-Benutzermodell mit Telefonmodell. 

Wenn ich mit Phone auf das Benutzermodell zugreifen möchte, müssen Sie im Telefonmodell BelongsTo hinzufügen.

class Phone extends Model
{
    /**
     * Get the user that owns the phone.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

Sie können diesen Link für weitere Details verweisen.

8
Ketav Chotaliya

Der Hauptunterschied besteht darin, welche Seite der Beziehung den Fremdschlüssel der Beziehung enthält. Das Modell, das $ this-> goesTo () aufruft, ist das Besitzmodell in den Beziehungen one-to-one und many-to-one und enthält den Schlüssel des Besitzermodells.

Beispiel Eins-zu-Eins-Beziehung:

class User extends Model {
  public function car() {
    // user has at maximum one car, 
    // so $user->car will return a single model
    return $this->hasOne('Car');
  }
}

class Car extends Model {
  public function owner() {
    // cars table has owner_id field that stores id of related user model
    return $this->belongsTo('User'); 
  }
}

Beispiel one-to-many Beziehung:

class User extends Model {
  public function phoneNumbers() {
    // user can have multiple phone numbers, 
    // so $user->phoneNumbers will return a collection of models
    return $this->hasMany('PhoneNumber');
  }
}

class PhoneNumber extends Model {
  public function owner() {
    // phone_numbers table has owner_id field that stores id of related user model
    return $this->belongsTo('User'); 
  }
}
24
jedrzej.kurylo

Eins-zu-Eins-Beziehung: Sie können als Benutzer ein ( hasOne ) Profil haben. Und natürlich gilt auch die Umkehrung. Profil ( GehörtTo ) einen Benutzer. Ein Benutzer kann nicht mehr als ein Profil haben und ein Profil kann nicht mehreren Benutzern angehören.

2
Naresh Ramoliya

Wenn Sie eine 1: 1-Beziehung zwischen zwei Tabellen herstellen möchten, müssen Sie zuerst eine "hasOne" -Relation erstellen. Wenn Sie eine inverse Tabellenbeziehung herstellen möchten, müssen Sie "Gehört zu" erstellen. Es ist ein einfacher Unterschied zwischen HasOne und Gehört zu der Beziehung, wenn Sie über diese One To Many (Inverse) wissen wollen
Nachdem wir nun auf alle Kommentare eines Posts zugreifen können, definieren wir eine Beziehung, damit ein Kommentar auf den übergeordneten Post zugreifen kann. Um die Inverse einer hasMany-Beziehung zu definieren, definieren Sie eine Beziehungsfunktion im untergeordneten Modell, die die belongsTo -Methode aufruft:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    /**
     * Get the post that owns the comment.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}
1

Hier können Sie ein gutes Beispiel sehen und sehen, was zwischen BelongsTo und HasOne in eloquent der Unterschied ist.

Eloquent Relationships Spickzettel von Mahmoud Zalthttps://link.medium.com/9lj9BAG8lR

0