我正在使用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
表中,但是将来我可能会有子子类别。构造表的最佳方法是什么?
答案 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