如何通过在laravel中填写相同的表格来为多个用户分配任务?

Posted

技术标签:

【中文标题】如何通过在laravel中填写相同的表格来为多个用户分配任务?【英文标题】:How to give task to multiple users by filling same form in laravel? 【发布时间】:2021-07-04 05:39:43 【问题描述】:

我做了一个任务管理器来练习。我有 1 个查询,我如何通过填写 1 个表单将任务分配给多个用户

这是我的任务控制器

public function store(Request $request)

    $request->validate([
        'staff_id' => 'required',
        'task' => 'required',
        'done_at' => 'sometimes',
    ]);

    $task = Task::create([
        'staff_id' => $request->input('staff_id'),
        'task' => $request->input('task'),
        'done_at' => $request->input('done_at'),
    ]);

    return redirect()->route('tasks.index')->withSuccess('Done');

public function complete($id)

    $task = Task::find($id);
    if ($task->done_at !== null) 
        $task->done_at = null;

        $task->save();
     else 
        $task->done_at = now();

        $task->save();

这是我的任务模型,任务模型与另一个表名人员有关系

use HasFactory;

protected $fillable = [
    'staff_id',
    'task',
];

public function staff()

    return $this->belongsTo(Staff::class);

这是我的创建页面,其中有一个表单

<form method="post" action="route('tasks.store')">
        @csrf
        <table>
                <tr>
                    <td>Staff Name : </td>
                    <td>
                        <select name="staff_id" id="staff_id">
                            <option value="">Select One</option>
                            @foreach ($staffs as $staff)

                                <option value=" $staff->id "> $staff->name </option>

                            @endforeach
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Task : </td>
                    <td><input type="text" name="task" class="form-control"></td>
                </tr>
                <tr>
                    <td>Done At :</td>
                    <td><input type="time" name="done_at" class="form-control"></td>
                </tr>
            <td><button class="btn btn-primary" name="submit" type="submit" value="submit" id="submit">Submit</button></td>
        </table>
    </form>

这是我的任务表,这是我的任务表,这是我的任务表,这是我的任务表。

Schema::create('tasks', function (Blueprint $table) 
        $table->id();
        $table->bigInteger('staff_id')->nullable();
        $table->string('task')->nullable();
        $table->dateTime('done_at')->nullable();
        $table->timestamps();
    );

【问题讨论】:

【参考方案1】:

您需要为多个用户添加Foreachloop

   public function store(Request $request)
    
        $request->validate([
            'staff_id' => 'required',
            'task' => 'required',
            'done_at' => 'sometimes',
        ]);
    

foreach($request->staff_id as $staff_ID)

 $task = Task::create([
            'staff_id' => $staff_ID,
            'task' => $request->input('task'),
            'done_at' => $request->input('done_at'),
        ]);


       
    
        return redirect()->route('tasks.index')->withSuccess('Done');
    

【讨论】:

我认为他的代码结构不支持这一点。如果您查看他仅发送一个 id 的视图,则模型中的模型关系结构不正确,我认为这些东西需要更改【参考方案2】:

你需要改变一些文件中的一些东西

任务模型

您需要将任务和人员之间的关系更改为多对多,并为此添加数据透视表,请参阅docs

    public function staff()

    return $this->belongToMany(Staff::class);

然后在控制器中,您需要将您创建的任务附加到这样的员工 ID 数组中

$task = Task::create([
        'task' => $request->input('task'),
        'done_at' => $request->input('done_at'),
    ]);
$task->staff()->attach($request->input('staff_id'))

最后,在视图中,您需要发送一组员工 ID,您可以使用 js 库(如 select2 或其他内容)通过多项选择来完成,请参阅 docs

【讨论】:

以上是关于如何通过在laravel中填写相同的表格来为多个用户分配任务?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel,如何在 HTML 表格中输出相同 ID 的多条记录?

如何在 laravel 中使用 jquery 自动填写 PayPal Guest Checkout 表单

Laravel 使用 oauth2 申请表格 - 概念问题

当一个或多个变量为空时,如何将多个变量发送到 laravel 中的视图

Laravel 8 如果标题相同,则合并 HTML 表格列

Chrome:多次填写相同的表格进行测试