web-dev-qa-db-fra.com

Quelle est la différence entre BelongsTo et HasOne dans Laravel

Tout organisme peut-il me dire quelle est la principale différence entre
les appartient à et HasOne relation dans éloquent .

17
Pardeep Pathania

BelongsTo est un inverse de HasOne.

Nous pouvons définir l'inverse d'une relation hasOne en utilisant la méthode d'appartiens . Prenons un exemple simple avec les modèles User et Phone.

Je donne hasOne relation d'utilisateur à téléphone.

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

À l'aide de cette relation, je peux obtenir les données du modèle de téléphone à l'aide du modèle d'utilisateur.

Mais cela n’est pas possible avec un processus inverse utilisant HasOne. Comme le modèle d'utilisateur d'accès utilisant le modèle de téléphone. 

Si je veux accéder au modèle d'utilisateur à l'aide de Phone, il est nécessaire d'ajouter BelongsTo dans le modèle de téléphone.

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

Vous pouvez consulter ce lien link pour plus de détails.

8
Ketav Chotaliya

La principale différence réside dans le côté de la relation qui détient la clé étrangère. Le modèle qui appelle $ this-> appartientTo () est le modèle appartenant à un-à-un et plusieurs-à-un et détient la clé du modèle propriétaire.

Exemple one-to-one relationship:

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'); 
  }
}

Exemple un-à-plusieurs relation:

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

Relation un à un: en tant qu’utilisateur, vous pouvez avoir un profil ( hasOne ). Et bien sûr, l'inverse s'applique également. Profil ( appartientTo ) un utilisateur. Un utilisateur ne peut pas avoir plus d'un profil et un profil ne peut pas appartenir à plusieurs utilisateurs.

2
Naresh Ramoliya

Vous pouvez voir ici un bon exemple et voir quelle est la différence entre les relations BelongsTo et HasOne dans éloquent.

Aide-mémoire Éloquent sur les relations de Mahmoud Zalthttps://link.medium.com/9lj9BAG8lR

0
Mihail Kuznetsov