Laravel 5.6: отношение «многие ко многим» возвращает пустой объект - PullRequest
0 голосов
/ 11 сентября 2018

Я устанавливаю отношение «многие ко многим» в моделях Laravel 5.6, но, поскольку я не соблюдаю соглашение об именах Laravel, я, безусловно, допускаю ошибку в имени таблицы / внешнего ключа, из-за которой оно не работает.

Мои таблицы, связанные с разделом блога, имеют префикс blog_:

  1. blog_posts собирает информацию обо всех сообщениях (id, title, article и т. Д.)
  2. blog_tags определяет теги, которые можно использовать для отметки сообщения (id, name)
  3. blog_posts_tags - сводная таблица, которая создает отношения между записями и тегами (id, post_id, tag_id)

Как уже было сказано, я пытаюсь установить отношения в Laravel:

Модель: BlogPost.php

/**
 * The tags that belong to the post.
 */
public function tags()
{
    return $this->belongsToMany('App\BlogTag', 'blog_posts_tags', 'post_id', 'tag_id'); 
}

Модель: BlogTag.php

/**
 * The posts that belong to the tag.
 */
public function posts()
{
    return $this->belongsToMany('App\BlogPost', 'blog_posts_tags', 'tag_id', 'post_id');
}

Проблема в том, что когда я вызываю tags() метод, возвращаемый объект не имеет тегов внутри:

$post = BlogPost::find($id);
$tags = $post->tags();

Где я не прав?

1 Ответ

0 голосов
/ 11 сентября 2018

$post->tags() возвращает ваш освобожденный экземпляр с помощью построителя запросов.

если вы хотите получить освобожденные значения тега, просто используйте имя отношения

пример: $tags = $post->tags;

foreach($tags as $tag){
   var_dump($tag);
}
...