我正在使用带有Jetstream-Livewire的Laravel 8,想要在三个表之间建立雄辩的关系。即类别,子类别和菜单项。 1个类别有许多子类别,而1个子类别只有1个类别。 1个子类别具有许多菜单项,而1个菜单项仅具有1个子类别。我应该如何继续以下工作,主要是基于上述关系,我想在单个刀片视图中使用所有三个表创建CRUD功能,请指导我。请检查下表。
Category Table
-----------------------
id
category_name
Sub Category Table
-----------------------
id
category_id
sub_category_name
Menu Item Table
-----------------------
id
sub_category_id
item_name
item_description
答案 0 :(得分:1)
对于Category
:这是一对多的自引用关系。
子类别不需要单独的表格。只需使用一个Category
表即可轻松对其进行管理。
您的Category
表模式如下所示:
id
category_title
category_id (default: null)
category_id
是某个类别的父项。
category_id
是其自身的外键(类别表)。因此,自我反省的关系。默认情况下,它设置为null,表示它是根父元素,没有父元素。
示例:
id category_title category_id (or parent_id)
1 Welcome Drinks On Arrival null
2 Essentials 1
3 Mocktails 1
答案 1 :(得分:1)
根据您当前的结构,关系如下所示
类别表
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'fillable_values_here'
];
public function subCategories() {
return $this->hasMany(SubCategory::class, 'category_id');
}
public function menus() {
return $this->hasManyThrough(
'Menu::class',
'SubCategory::class',
'category_id',
'sub_category_id'
);
}
}
子类别模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class SubCategory extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'fillable_values_here'
];
public function category() {
return $this->belongsTo(Category::class, 'category_id');
}
public function menus() {
return $this->hasMany(Menu::class, 'sub_category_id');
}
}
菜单模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Menu extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'fillable_values_here'
];
public function subCategory() {
return $this->belongsTo(SubCategory::class, 'sub_category_id');
}
}
如果您什么都不懂,请随时提出。并阅读docs有关Laravel关系的信息。