Laravel雄辩的多态用户特定类别

Laravel雄辩的多态用户特定类别,laravel,eloquent,eloquent-relationship,polymorphic-relationship,Laravel,Eloquent,Eloquent Relationship,Polymorphic Relationship,我需要一些帮助来定义我的模型/与Laravel/Eloquent的关系 一般来说,我的想法是,用户可以创建类似ToDoList的项目,这些项目可以进行分类。项目可以在用户之间共享,但每个用户都可以拥有不同的“视图”,这意味着可以根据每个用户将项目添加到类别中。这些项目是多态的-这意味着有ToDoList、todos和notes。。这些都是可以分类的。类别可以创建为空,以后可以用项目“填充”。类别本身可以有父类别(与同一表上的ID相关) 目前我有这样的表格: 对于类别: 对于用户: 对于ToD

我需要一些帮助来定义我的模型/与Laravel/Eloquent的关系

一般来说,我的想法是,用户可以创建类似ToDoList的项目,这些项目可以进行分类。项目可以在用户之间共享,但每个用户都可以拥有不同的“视图”,这意味着可以根据每个用户将项目添加到类别中。这些项目是多态的-这意味着有ToDoList、todos和notes。。这些都是可以分类的。类别可以创建为空,以后可以用项目“填充”。类别本身可以有父类别(与同一表上的ID相关)

目前我有这样的表格:

对于类别:

对于用户:

对于ToDoList之类的项目:

对我来说,“类别”表看起来有问题,因为:

  • 大量重复信息(类别名称、父值)
  • 类别数据的更新需要更新多行。示例:用户添加一个类别作为另一个类别的子类别->该类别的所有行都需要用父id更新
  • 我想我弄乱了关系和/或数据库表本身。一个更好的方法是使用一个中间表来链接分类表、用户和类别,但我无法用雄辩的语言来构建这个表。。文档中没有类似于我的案例的例子,因为它是一种多态性的中间产物,有什么关系

    todolist模型的定义如下:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Todolist extends Model
    {
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name', 'shared', 'owner'
        ];
    
        /**
         * The attributes excluded from the model's JSON form.
         *
         * @var array
         */
        protected $hidden = [
            
        ];
        public function owner()
        {
            return $this->hasOne('App\User');
        }
        public function category()
        {
            return $this->morphOne('App\Category', 'categorizable');
        }
    }
    
    
    
    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Category extends Model
    {
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name'
        ];
    
        /**
         * The attributes excluded from the model's JSON form.
         *
         * @var array
         */
        protected $hidden = [
            
        ];
        public function categorizable()
        {
            return $this->morphTo();
        }
        public function user()
        {
            return $this->belongsTo('App\User');
        }
    }