gpt4 book ai didi

mysql - 一个疯狂的数据库结构 - 建议

转载 作者:行者123 更新时间:2023-12-04 10:13:13 25 4
gpt4 key购买 nike

我正在做一个项目,我需要在 4 个模型之间创建三个多对多关系。这是它的过程:

  • 常见问题类别可以有许多常见问题子类别,反之亦然。
  • 常见问题组可以有许多常见问题的子类别,反之亦然。
  • 常见问题可以有许多常见问题组,反之亦然。

  • 对于所有的数据库专家,我应该如何在 Laravel 中设计这个数据库模式?我应该有三个不同的数据透视表吗?我应该使用多态关系吗?

    我以前使用过多态关系,但在这种情况下我很难实现它。

    最佳答案

    我会做这样的事情:

    常见问题分类表

    Schema::create('faq_categories', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    });

    Schema::table('faq_categories', function (Blueprint $table) {
    $table->unsignedInteger('parent_id')->nullable();
    $table->foreign('parent_id')->references('id')->on('faq_categories')->onDelete('cascade');
    });

    常见问题组表
    Schema::create('faq_groups', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    });

    常见问题表
    Schema::create('faqs', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    });

    正如您所看到的,我不会创建 FAQ 子类别表,因为让类别表将自身引用到父类别(这对于使外键可以为空以创建顶级类别也很重要)会更清晰。

    现在要设置表之间的关系,我们可以这样做:

    常见问题类别 - 常见问题组(多对多)
    Schema::create('faq_category_faq_group', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('faq_category_id');
    $table->foreign('faq_category_id')->refrences('id')->on('faq_categories')->onDelete('cascade');
    $table->unsignedInteger('faq_group_id');
    $table->foreign('faq_group_id')->refrences('id')->on('faq_groups')->onDelete('cascade');
    });

    常见问题 - 常见问题组(多对多)
    Schema::create('faq_faq_group', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('faq_id');
    $table->foreign('faq_id')->refrences('id')->on('faqs')->onDelete('cascade');
    $table->unsignedInteger('faq_group_id');
    $table->foreign('faq_group_id')->refrences('id')->on('faq_groups')->onDelete('cascade');
    });

    Should I use polymorphic relationships?



    我认为在这种情况下多态关系没有任何意义。我会坚持多对多的标准。

    在你的模型类中,你应该设置所有的关系,就像在 docs 中引用的一样。 .

    你可以这样做:

    常见问题分类型号
    class FaqCategory extends Model
    {
    /**
    * Get the category's parent category.
    */
    public function parent()
    {
    return $this->belongsTo('App\FaqCategory');
    }

    /**
    * Get the category's sub categories.
    */
    public function sub_categories()
    {
    return $this->hasMany('App\FaqCategory', 'parent_id');
    }

    /**
    * Get the category's faq groups.
    */
    public function faq_groups()
    {
    return $this->belongsToMany('App\FaqGroup');
    }
    }

    常见问题群模型
    class FaqGroup extends Model
    {
    /**
    * Get the group's faq categories.
    */
    public function faq_categories()
    {
    return $this->belongsToMany('App\FaqCategory');
    }

    /**
    * Get the group's faqs.
    */
    public function faqs()
    {
    return $this->belongsToMany('App\Faq');
    }
    }

    常见问题模型
    class Faq extends Model
    {
    /**
    * Get the faq's faq groups.
    */
    public function faq_groups()
    {
    return $this->belongsToMany('App\FaqGroup');
    }
    }

    关于mysql - 一个疯狂的数据库结构 - 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61212874/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com