Вопрос:

В чем разница между BelongsTo и HasOne в Laravel

php laravel laravel-5 eloquent

8839 просмотра

5 ответа

410 Репутация автора

Может ли кто-нибудь сказать мне, в чем главное различие между
отношениями BelongsTo и HasOne в красноречивом .

Автор: Pardeep Pathania Источник Размещён: 02.06.2016 04:46

Ответы (5)


30 плюса

27213 Репутация автора

Основное различие заключается в том, какая сторона отношения содержит внешний ключ отношения. Модель, которая вызывает $ this-> ownTo (), является собственной моделью в отношениях « один к одному» и « многие к одному» и содержит ключ модели-владельца.

Пример отношения один-к-одному :

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

Пример отношения один ко многим :

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'); 
  }
}
Автор: jedrzej.kurylo Размещён: 02.06.2016 05:20

9 плюса

429 Репутация автора

Решение

BelongsTo является инверсией HasOne.

Мы можем определить обратное отношение hasOne, используя метод ownTo. Возьмем простой пример с Userи Phoneмоделей.

Я даю отношение hasOne от пользователя к телефону.

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

Используя это отношение, я могу получить данные модели телефона, используя модель пользователя.

Но это невозможно с обратным процессом, использующим HasOne . Как модель доступа пользователя, используя модель телефона.

Если я хочу получить доступ к модели пользователя с помощью телефона, то необходимо добавить BelongsTo в модель телефона.

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

Вы можете обратиться по этой ссылке для более подробной информации.

Автор: Ketav Chotaliya Размещён: 02.06.2016 05:51

2 плюса

324 Репутация автора

Отношение один-к-одному: Вы, как пользователь, можете иметь один ( hasOne ) профиль. И, конечно, обратное также применимо. Профиль ( принадлежит ) пользователю. Пользователь не может иметь более одного профиля, и профиль не может принадлежать нескольким пользователям.

Автор: Naresh Ramoliya Размещён: 23.08.2017 11:21

0 плюса

65 Репутация автора

Здесь вы можете увидеть хороший пример и понять, в чем разница между отношениями BelongsTo и HasOne в eloquent .

Шпаргал по красноречивым отношениям Махмуда Зальта https://link.medium.com/9lj9BAG8lR

Автор: Mihail Kuznetsov Размещён: 28.10.2018 05:35

0 плюса

1 Репутация автора

Если вы хотите установить отношение «один к одному» между двумя таблицами, то сначала вы должны установить отношение «hasOne», а если вы хотите установить обратное отношение к таблице, тогда вы сделаете «« Принадлежит »... Это простая разница между HasOne и Принадлежит к связи, если вы хотите знать об этом One To Many (Inverse)
Теперь, когда мы можем получить доступ ко всем комментариям к записи, давайте определим отношение, чтобы позволить комментарию получить доступ к его родительскому сообщению. Чтобы определить обратное отношение hasMany Определите функцию отношения на дочерней модели, которая вызывает belongsToметод:

<?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');
    }
}
Автор: Punit khandelwal Размещён: 13.06.2019 08:50
Вопросы из категории :
32x32