0

我正在尝试制作一个任务管理系统。用户可以创建一个任务并将多个用户分配给该任务。因此任务表将有一个 user_id 用于标识创建任务的用户。有一个由 user_id 和 task_id 组成的数据透视表,以便可以将任务的受让人映射到那里。

任务表详细信息

Schema::create('tasks', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title');
        $table->text('content');
        $table->Integer('views');
        $table->foreignId('user_id')->constrained()->onDelete('cascade')->onUpdate('cascade');
        $table->timestamps();
    });

用户表结构

Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

数据透视表 task_user 结构

Schema::create('task_user', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->foreignId('task_id')->constrained()->onDelete('cascade')->onUpdate('cascade');
        $table->foreignId('user_id')->constrained()->onDelete('cascade')->onUpdate('cascade');
        $table->string('status')->default('TODO');
        $table->timestamps();
    });

任务模型有这个

public function users()
{
    return $this->belongsToMany('App\User');
}

用户模型有这个

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

现在我有一个从 UserResource 获取数据的任务资源,但我只能从数据透视表中获取数据。

return [
        'id' => $this->id,
        'title' => $this->title,
        'content' => $this->content,
        'views' => $this->views,
        'user' => UserResource::collection($this->whenLoaded('users')),
        'comments' => CommentResource::collection($this->whenLoaded('comments')),
        'assingnees' => $this->whenPivotLoaded('users', function () {
            return $this->users->pluck('pivot.user_id')->unique()->all();
        }),
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
    ];

我想要数据透视表中assignees的用户详细信息和任务表中的用户详细信息user。但最终,我最终获得了数据透视表用户user,并且assignees在 JSON 响应中没有获得任何变量。如何在单独的变量中获取两个用户数据?

4

0 回答 0