Отношения в Eloquent

Буквально на пальцах основные связки и использование. Здесь не будет подробностей переопределения полей первичных и внешних ключей и прочего тюнинга. Только базис.

Один к одному

Post-image

Один пост может принадлежать к одной категории.

// Модель Category
class Category extends Model
{
    // Код модели
    // Предполагаем, что в таблице, связанной с моделью есть поля id и title
}

// Модель Post
class Post extends Model
{
    // Код модели
    // Предполагаем, что в таблице, связанной с моделью есть поля id и category_id
    public function category()
    {
        return $this->belongsTo('App\Category');
    }
}

Таким образом, чтобы получить в выборке указатель на категорию поста, делаем так:

// Предполагаем, что в таблице, связанной с моделью есть поле title
$categoryTitle = Post::find(1)->category->title;

Связь один к одному так же можно реализовать через метод hasOne(), а не только через belongTo(), для этого в модели Category должно быть поле post_id.

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

Post-image

Несколько комментариев могут принадлежать к одному посту.

// Модель Comment
class Comment extends Model
{
    // Код модели
    // Предполагаем, что в таблице, связанной с моделью есть поля id и post_id
}

// Модель Post
class Post extends Model
{
    // Код модели
    // Предполагаем, что в таблице, связанной с моделью есть поля id
    public function comments()
    {
        return $this->hasMany('App\Category');
    }
}

Таким образом, чтобы получить в выборке указатель на комментарии конкретного поста, делаем так:

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

// Комментарии, например, можно перебрать в цикле
foreach ($comments as $comment)
{
    print $comment->text; // Предполагается, что в таблице, связанной с моделью Comment есть поле text
}

Многие ко многим

Post-image

Тег может принадлежать к нескольким постам, так же как и пост может принадлежать к нескольким тегам.

// Модель Tag
class Tag extends Model
{
    // Код модели
    // Предполагаем, что в таблице, связанной с моделью есть поля id и title
    public function posts()
    {
        return $this->belongsToMany(Post::class);
    }
}

// Модель Post
class Post extends Model
{
    // Код модели
    // Предполагаем, что в таблице, связанной с моделью есть поля id и title
    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}

Важно не забывать, что при создании моделей должна быть создана связующая таблица tag_post, так как все выборки при такой связке будет идти через нее

Таким образом, чтобы получить все теги поста, делаем так:

$tags = Post::find(1)->tags;

// Теги, например, можно перебрать в цикле
foreach ($tags as $tag)
{
    print $tag->title; // Предполагается, что в таблице, связанной с моделью Tag есть поле title
}

А чтобы по тегу выбрать все посты к нему относящиеся, делаем так:

$posts = Tag::find(1)->posts;

// Посты, например, можно перебрать в цикле
foreach ($posts as $post)
{
    print $post->title; // Предполагается, что в таблице, связанной с моделью Post есть поле title
}