Получите доступ к целевой модели с помощью hasManyThrough между двумя этапами отношений has-many - PullRequest
1 голос
/ 19 апреля 2020

Пожалуйста, смотрите прикрепленную структуру:

enter image description here

Я хочу получить доступ ко всем упаковкам, в которых есть фрукты, имеющие указанную c метку.

Код Seudo здесь: Tag: 'Good fruits' -> Fruits: ['banan', 'cactus'] -> Packs: ['Exotic', 'DessertFruits']

Итак, я хочу получить что-то вроде:

$myTag = App\Tag::where('name', 'goodFruits')->first();

$mytag->packs

=>Illuminate\Database\Eloquent\Collection {#3907
     all: [
      App\Pack {
          .. 'Exotic' ..
       },
       {
       ... 'DessertFruits' ...
       },
     ],
   }

И между Pack и Fruit, и между Fruit и Tag есть сводные таблицы , У меня есть правильная настройка с принадлежащим ToMany в каждой модели. В модели тега у меня также есть:

    /**
    * Gets all the packs for a tag
    */
    public function packs()
    {
        return $this->hasManyThrough('App\Pack', 'App\Fruit');
    }

Все в соответствии с:

https://laravel.com/docs/6.x/eloquent-relationships#has -много через

Я бегу Laravel 6.

Так в чем же проблема?

Когда я выполняю $myTag->packs, я получаю:

Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'fruit.tag_id' in 'field list' (SQL: select `packs`.*, `fruits`.`tag_id` as `laravel_through_key` from `packs` inner join `fruits` on `fruits`.`id` = `packs`.`fruit_id` where `fruits`.`tag_id` = 1)' 

Что я делаю не так? Как мне добиться того, чего я хочу?

...