想要在三个表之间建立雄辩的关系

时间:2020-10-15 07:19:26

标签: php laravel laravel-8

我正在使用带有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

2 个答案:

答案 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关系的信息。