php - 如何在 Laravel 5.2 中创建表关系

标签 php mysql laravel-5

我正在使用 laravel 5.2 开发项目管理应用程序,在我的应用程序中,用户可以创建项目,每个项目都有许多任务,每个任务也有许多子任务。在我的表项目和任务表中有以下关系。 任务模型与项目模型的关系为

public function project()
     {
         return $this->belongsTo('App\Project');
     }

项目模型与任务表的关系

public function tasks(){
         return $this->hasMany('App\Task');
}

我需要子任务表来存储子任务,我现在的子任务表如下

id    subtask  task_id   project_id
1       abc       2           1
2       dfg       2           1
3       frt       3           2

如何创建与项目和任务表相关的子任务模型?

已更新 请查看我的子任务迁移文件

 public function up()
        {
            Schema::create('subtasks', function(Blueprint $table)
            {
                $table->increments('id')->unsigned();
                $table->longText('subtask_name');
                $table->integer('task_id')->unsigned();
                $table->integer('project_id')->unsigned();
                $table->timestamps();

                $table->foreign('task_id')
                      ->references('id')->on('task')
                      ->onUpdate('cascade')
                      ->onDelete('cascade');
            });
        }

最佳答案

用户和项目表具有多对多关系。因为每个用户可以创建多个项目,一个项目可能属于多个用户。

项目和任务具有一对多关系。因为每个Project都有很多Task,一个Task又属于一个Project

任务和子任务具有一对多关系。因为每个Task可以有很多Subtask,一个Subtask属于每个用户。

User.php(模型)中

public function projects(){
    return $this->belongsToMany(Project::class);
}

Project.php(模型)中

public function users(){
    return $this->belongsToMany(User::class);
}

public function tasks(){
    return $this->hasMany(Tasks::class);
}

Task.php(模型)中

public function project(){
    return $this->belongsTo(Project::class);
}

public function subtasks(){
    return $this->hasMany(SubTask::class);
}

SubTask.php(模型)中

public function task(){
    return $this->belongsTo(Task::class);
}

用法认为您有一个任务并且想知道它具有的所有子任务。

例如:只是为了演示,我正在使用修补程序从命令行进行操作。

php artisan tinker

$task = App\Task:whereId(1)->get(); //Get the task details with id 1

$task->subtasks; //This will fetch all the subtasks that belongs to the task

关于php - 如何在 Laravel 5.2 中创建表关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628033/

相关文章:

mysql - freeradius nas.sql表字段说明

mysql - 错误 1054 (42S22) : Unknown column 'year' in 'where clause'

mysql - 提前加入 Laravel 5

php - Laravel Mailable 中的 "Unable to open file for reading"(Swift_IoException)

php - Laravel 中如何避免时间重叠

php - foreach 循环中的 continue 问题

php - 如何在 Linux 上运行带有来自 PHP web 脚本的音频扬声器输出的 mplayer?

php - Web 浏览器上的日语字符编码问题

php - 适用于 Linux 的命令行 html 格式化程序(或在 PHP 中执行此操作的方法)?

php - 如何在mysql数据库中保存多个文件名(多次上传)?