Могу ли я использовать красноречивое отношение Laravel hasManyThrough для моего конкретного случая?

Я пытаюсь получить данные из таблицы, с которой у меня нет прямого отношения к модели, которую я сейчас использую.

Моя структура данных:

Таблица: сообщения

  • идентификатор - целое число
  • заголовок - строка

Таблица: post_stacks

  • идентификатор - целое число
  • post_id - целое число
  • stack_id - целое число

Таблица: стеки

  • идентификатор - целое число
  • тело - строка
  • URL - строка

Моя красноречивая модель взята из Post.php (таблица сообщений), и я пытаюсь получить все стеки, связанные с моим сообщением (из таблицы стеков). Я хочу объявить свои отношения только в Post.php, а не в сводной таблице (post_stacks). Я пытался использовать hasManyThrough, но не могу заставить его работать?

public function img()
    {
        return $this->hasManyThrough(\App\Stack::class, \App\PostStack::class, 'post_id', 'stack_id', 'id');
    }

Кто-нибудь знает, как я могу получить нужные данные? Спасибо!


person 75Kane    schedule 06.06.2017    source источник


Ответы (1)


Можете ли вы попытаться установить ниже отношения в вашей модели сообщений.

public function stacks()
{
    return $this->hasManyThrough(
        'App\Stacks', 'App\PostStacks',
        'post_id', 'id', 'id'
    );
}

Также взгляните на это, https://laravel.com/docs/5.4/eloquent-relationships#has-many-through

Согласно этому документу, третий аргумент в hasManyThrough — это имя внешнего ключа в промежуточной модели. В нашем случае 'post_id' — это внешний ключ для post_stack, который имеет прямое отношение к posts.

Четвертый аргумент — это имя внешнего ключа в окончательной модели. т.е. 'id' на stacks. что имеет отношение к post_stacks ( 'post_id' ). Пятый аргумент — локальный ключ. т.е. id постов

person Jickson Johnson Koottala    schedule 08.06.2017