Eloquent ORM: Relace: One To Many

Relace One To Many

Jeden prvek z jedné skupiny (např. článek na blogu) vlastní více prvků z druhé skupiny (např. komentářů).

Zároveň více prvků z druhé skupiny (např. komentářů) patří jednomu prvku z první skupiny (např. článku na blogu).

Nastavení v modelu

V Eloquent ORM tuto vazbu definujeme následovně:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
 
  /**
   * Get the comments for the blog post.
   */
  public function comments()
  {
    return $this->hasMany('App\Comment');
  }

}
namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{

  /**
   * Get the post that the comment belongs to.
   */
  public function post()
  {
    return $this->belongsTo('App\Post');
  }

}

Pokud má sloupec cizího klíče v tabulce comments jiný název než post_id, je třeba při definici vztahu tento název uvést:

public function post()
{
  return $this->belongsTo('App\Post', 'my_post_id');
}

Získání dat

Získání všech komentářů pro článek s id 1:

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

foreach($comments as $comment){
}

Dotaz na komentáře lze dále filtrovat:

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

Získání článku podle komentáře:

$comment = App\Comment::find(1);
echo $comment->post->title;

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *