首页 > 解决方案 > 4张表laravel之间的关系

问题描述

我有 4 张桌子

套餐:

id
name

测试:

id
name
subcategory_id

类别:

id
name
parent_id = 0 // if main category

包测试:(数据透视表)

id
package_id
test_id

我想在每个包中使用这样的类别进行测试

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

我在模型之间建立了一些关系,但我无法实现这种代码形式。

标签: phplaravelrelational-database

解决方案


我期待Tests桌子有category_id

制作类似的模型(阅读更多关于 Laravel 关系的信息):-

包.php

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

包测试.php

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

测试.php

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

我对映射(一对一,一对多)一无所知。我猜他们,希望他们是对的。

现在像访问它们一样。

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

推荐阅读