如何通过在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 表单