соотношение между 4 таблицами laravel - PullRequest
0 голосов
/ 08 мая 2020

У меня 4 таблицы

Пакеты:

id
name

Тесты:

id
name
subcategory_id

категория:

id
name
parent_id = 0 // if main category

packages_tests: (сводная таблица)

id
package_id
test_id

Я хочу получить тесты внутри каждого пакета с такой категорией

packages: [
   name: package1
   categories: [
     {
       name: mainCategory1
       tests: [
         {test1},
         {test2}
       ]
     },
     {
       name: mainCategory2
       tests: [
         {test3},
         {test4}
       ]
     }
   ]
]

Я установил отношения между моделями, но не могу добиться такой формы кода.

1 Ответ

0 голосов
/ 08 мая 2020

Я ожидаю, что в таблице Tests будет category_id.

Сделайте такие модели, как (Подробнее о Laravel отношениях) : -

Пакет . php

public function packageTests()
{
    return $this->hasMany(PackagesTests::class)
}

PackageTest. php

public function tests()
{
    return $this->hasOne(Test::class)
}

Test. php

public function category()
{
    return $this->hasOne(Category::class)
}

Я понятия не имею о сопоставлениях (один-один, один-много). Я думаю, они правы.

Теперь доступ к ним как.

Package::with('packageTests')
        ->with('packageTests.tests')
        ->with('packageTests.tests.category')
        ->where('condition_array')
        ->get()
...