Пожалуйста, смотрите прикрепленную структуру:
Я хочу получить доступ ко всем упаковкам, в которых есть фрукты, имеющие указанную 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)'
Что я делаю не так? Как мне добиться того, чего я хочу?