- Отношение 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');

 
  
                                    	
                        