пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Отношение hasOne

  1. Отношение hasOne

Один к одному

Связь вида «один к одному» является очень простой. К примеру, модель User может иметь один Phone. Чтобы определить такое отношение, мы помещаем метод phone() в модель User. Метод phone() должен возвращать результат метода hasOne() от базового класса модели Eloquent:

<?php



namespace App;



use Illuminate\Database\Eloquent\Model;



class User extends Model

{

  /**

   * Получить запись с номером телефона пользователя.

   */

  public function phone()

  {

    return $this->hasOne('App\Phone');

  }

}

Первый параметр, передаваемый hasOne(), — имя связанной модели. Как только отношение установлено, вы можете получить к нему доступ через динамические свойства Eloquent. Динамические свойства позволяют вам получить доступ к функциям отношений, если бы они были свойствами модели:

$phone = User::find(1)->phone;

Eloquent считает, что внешний ключ отношения называется по имени модели. В данном случае предполагается, что это user_id. Если вы хотите перекрыть стандартное имя, передайте второй параметр методу hasOne():

return $this->hasOne('App\Phone', 'foreign_key');

Также Eloquent подразумевает, что внешний ключ должен иметь значение, привязанное к родительскому столбцу id (или другому $primaryKey). Другими словами, Eloquent будет искать значение столбца id пользователя в столбце user_id записи Phone. Кроме того вы можете передать в метод третий аргумент, чтобы указать свой столбец для объединения:

return $this->hasOne('App\Phone', 'foreign_key', 'local_key');

Создание обратного отношения

Итак, у нас есть доступ к модели Phone из нашего User. Теперь давайте определим отношение для модели Phone, которое будет иметь доступ к User, владеющего этим телефоном. Для создания обратного отношения в модели Phone используйте метод belongsTo():

<?php



namespace App;



use Illuminate\Database\Eloquent\Model;



class Phone extends Model

{

  /**

    * Получить пользователя, владеющего данным телефоном.

    */

  public function user()

  {

    return $this->belongsTo('App\User');

  }

}

В примере выше Eloquent будет искать связь между user_id в модели Phone и id в модели User. По умолчанию Eloquent определяет имя внешнего ключа по имени метода отношения, добавляя суффикс _id. Однако, если имя внешнего ключа модели Phone не user_id, передайте это имя вторым параметром в метод belongsTo():

/**

  * Получить пользователя, владеющего данным телефоном.

  */

public function user()

{

  return $this->belongsTo('App\User', 'foreign_key');

}

Если ваша родительская модель не использует id в качестве первичного ключа, или вам бы хотелось присоединить дочернюю модель к другому столбцу, вы можете передать третий параметр в метод belongsTo(), который определяет имя связанного столбца в родительской таблице:

/**

* Получить пользователя, владеющего данным телефоном.

*/

public function user()

{

  return $this->belongsTo('App\User', 'foreign_key', 'other_key');

 


22.06.2017; 21:32
хиты: 110
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь