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

Отношение hasMany

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

Один ко многим

Отношение «один ко многим» используется для определения отношений, где одна модель владеет некоторым количеством других моделей. Примером отношения «один ко многим» является статья в блоге, которая имеет «много» комментариев. Как и другие отношения Eloquent вы можете смоделировать это отношение таким образом:

<?php



namespace App;



use Illuminate\Database\Eloquent\Model;



class Post extends Model

{

  /**

   * Получить комментарии статьи блога.

   */

  public function comments()

  {

    return $this->hasMany('App\Comment');

  }

}

Помните, что Eloquent автоматически определяет столбец внешнего ключа в модели Comment. По соглашению, Eloquent возьмёт «snake case» названия владеющей модели плюс _id. Таким образом, для данного примера, Eloquent предполагает, что внешним ключом для модели Comment будет post_id.

После определения отношения мы можем получить доступ к коллекции комментариев, обратившись к свойству comments. Помните, что поскольку Eloquent поддерживает «динамические свойства», мы можем обращаться к функциям отношений, как если бы они были определены свойством модели:

$comments = App\Post::find(1)->comments;



foreach ($comments as $comment) {

  //

}

Конечно, так как отношения служат и в качестве конструкторов запросов, вы можете добавлять дополнительные условия к тем комментариям, которые получены вызовом метода comments():

$comments = App\Post::find(1)->comments()->where('title', 'foo')->first();

Как и для метода hasOne() вы можете указать внешний и локальный ключи, передав дополнительные параметры в метод hasMany():

return $this->hasMany('App\Comment', 'foreign_key');



return $this->hasMany('App\Comment', 'foreign_key', 'local_key');

Определение обратного отношения

После получения доступа ко всем комментариям статьи давай определим отношение, которое позволит комментарию получить доступ к его статье. Чтобы определить обратное отношение hasMany(), давайте определим функцию отношения на дочерней модели, которая вызывает метод belongsTo():

<?php



namespace App;



use Illuminate\Database\Eloquent\Model;



class Comment extends Model

{

  /**

   * Получить статью данного комментария.

   */

  public function post()

  {

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

  }

}

После определения отношений мы можем получить модель Post для Comment, обратившись к динамическому свойству post:

$comment = App\Comment::find(1);



echo $comment->post->title;

В примере выше Eloquent пробует связать post_id из модели Comment с id модели Post. По умолчанию Eloquent определяет внешний ключ по имени метода отношения плюс _id. Однако, если внешний ключ для модели Comment не post_id, вы можете передать своё имя вторым параметром в метод belongsTo():

/**

 * Получить статью данного комментария.

 */

public function post()

{

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

}

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

/**

 * Получить статью данного комментария.

 */

public function post()

{

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

 

 


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