类别,子类别和服务的数据库结构

时间:2018-12-28 23:28:30

标签: mysql laravel laravel-5

我正在使用Laravel 5.5和MySql。在不向subCategoryID表中添加Services列的情况下,我无法弄清楚如何将类别和子类别与服务相关联。

当前这是我的表结构

Service_Categories

id, name
1, Legal Services
2, Personal Drivers

Service_Sub_Categories

id, ServiceCategoryID, name
1, 1, US Legal Services
2, 1, Europe Legal Services
3, 1, Canada Legal Services

服务

id, serviceCategoryID, name
1, 1, US Legal Services Comapny INC
2, 1, Canada Legal Services Company INC
3, 2, JSY Personal Drivers
4, 2, XYZ Personal Drivers

一项服务必须至少具有1个服务类别,但也可以具有0个或多个子类别

如您所见,Personal Drivers没有子类别,但是Legal Services有许多子类别。当用户选择“美国法律服务”时,我只想提出这些要求。我可以轻松地将subCategoryID列添加到Services表中,但是将来我可能会有子子类别。构造表的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果需要获取服务的所有子类别,则可以使用以下关系:

服务模型

public function category() {
    return $this->hasOne('App\Categories', 'id', 'service_category_id');
}

类别模型

public function subCategories()
{
    return $this->hasMany('App\subCategories', 'service_category_id');
}

获取服务ID 1的所有子类别:

Service::find(1)->category->subCategories

或者如果您需要从“类别”中获取服务及其所有子类别:

类别模型

public function service() {
    return $this->hasOne('App\Service', 'service_category_id');
}

服务模型

public function subCategories()
{
    return $this->hasMany('App\subCategories', 'service_category_id');
}

并获取类别ID 1的所有子类别:

Categories::find(1)->service->subCategories;

更新

您还可以使用关系-具有多次通过

https://laravel.com/docs/5.7/eloquent-relationships#has-many-through

相关问题