Php Laravel |如何使用表单对数据库中的存储项进行分组
我使用一个定义了默认任务的数据库表,并在表单中使用“foreach()”循环遍历它们。每个任务都有一个复选框,如果未选中,数据将不会进入数据库。当为特定项目定义了一个任务时,这不是问题。但当定义了多个任务时,它只选择最后一个任务并将其存储到数据库中。我需要存储它们,而不仅仅是最后一个任务 当复选框未选中时,我使用jQuery禁用字段 这是我的表格代码:Php Laravel |如何使用表单对数据库中的存储项进行分组,php,laravel,laravel-5,Php,Laravel,Laravel 5,我使用一个定义了默认任务的数据库表,并在表单中使用“foreach()”循环遍历它们。每个任务都有一个复选框,如果未选中,数据将不会进入数据库。当为特定项目定义了一个任务时,这不是问题。但当定义了多个任务时,它只选择最后一个任务并将其存储到数据库中。我需要存储它们,而不仅仅是最后一个任务 当复选框未选中时,我使用jQuery禁用字段 这是我的表格代码: <form id="task-form" class="uk-form-stacked" met
<form id="task-form"
class="uk-form-stacked"
method="post"
action="{{ route('project.storeTasks', ['project' => $project->id]) }}">
<table class="uk-table uk-table-middle">
<tr>
<th>Selecteer</th>
<th>Omschrijving</th>
<th>Toelichting</th>
<th>Uitvoering door</th>
<th>Budget</th>
<th>Deadline</th>
</tr>
@foreach($defaulttasks as $task)
<tr>
<td>
<input type="checkbox"
class="uk-checkbox selected"
name="tasks[{{ $task->id }}][checkbox]"
value="{{ $task->id }}"
checked>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="text"
class="input uk-input uk-width-1-1"
name="tasks[{{ $task->id }}][title]"
value="{{ old('title', isset($task->title)
? $task->title
: null) }}">
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<textarea class="input uk-textarea uk-width-1-1"
name="tasks[{{ $task->id }}][description]"
rows="1"
value="">{{ old('description', isset($task->description)
? $task->description
: null) }}</textarea>
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<select class="input uk-select uk-width-1-1" name="tasks[{{ $task->id }}][teammember]">
{{-- @foreach($project->team as $teammember)
<!-- <option value="{{ $teammember->id }}">{{ $teammember->name }}</option> -->
@endforeach --}}
</select>
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="number"
class="input uk-input"
name="tasks[{{ $task->id }}][budget]"
step="any"
value="{{ old('budget', isset($task->budget)
? $task->budget
: null) }}">
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="text"
class="input uk-input"
name="tasks[{{ $task->id }}][deadline]"
value="{{ old('deadline', isset($task->deadline)
? $task->deadline
: null) }}">
</div>
</div>
</td>
<input class="input" type="hidden" name="project_id" value="{{ $project->id }}">
</tr>
@endforeach
{{ csrf_field() }}
</table>
</form>
如果你们需要更多信息,告诉我强>
谢谢
编辑:根据我在FrankerZ帮助下所做的更改,它只存储第一个选定的任务,而不是所有选定的任务。您需要将输入元素转换为数组。如果在网页上多次输出
,则在将请求发送到服务器时,仅提交最后一次输入。当您使用括号表示法(即,task[$id]
)时,PHP自动支持转换为数组。转换字段:
<tr>
<td>
<input type="checkbox"
class="uk-checkbox selected"
name="tasks[{{ $task->id }}][checkbox]"
value="{{ $task->id }}"
checked>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="text"
class="input uk-input uk-width-1-1"
name="tasks[{{ $task->id }}][title]"
value="{{ old('title', isset($task->title)
? $task->title
: null) }}">
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<textarea class="input uk-textarea uk-width-1-1"
name="tasks[{{ $task->id }}][description]"
rows="1"
value="">{{ old('description', isset($task->description)
? $task->description
: null) }}</textarea>
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="number"
class="input uk-input"
name="tasks[{{ $task->id }}][budget]"
step="any"
value="{{ old('budget', isset($task->budget)
? $task->budget
: null) }}">
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="text"
class="input uk-input"
name="tasks[{{ $task->id }}]deadline"
value="{{ old('deadline', isset($task->deadline)
? $task->deadline
: null) }}">
</div>
</div>
</td>
<input class="input" type="hidden" name="project_id" value="{{ $project->id }}">
</tr>
它确实有效,但并不完全有效。我像你提到的那样更改了输入字段的名称。但是当我执行“
dd($request->checkbox)
”时,它只给我任务的id,而不是所有其他输入:array:3[▼ 14=>“14”15=>“15”16=>“16”]
。所以你所做的不起作用。我得到这个错误:试图获取非-object@iiRobin我确实在宽限期之前更新了它。你在使用我的更新代码吗?我和你一样更新了我的代码。它不再给我一个错误,但它不再存储多个任务,而是只存储第一个任务。执行var\u dump($new\u task)
并确保看到创建的每个新任务。然后我会调查$project->tasks()->save()
,看看当我执行var\u dump($new\u task)
时,它如何支持多个添加(抱歉,不是laravel专家)它实际上只显示通过复选框选中的第一个任务,而不是所有选中的任务,
<tr>
<td>
<input type="checkbox"
class="uk-checkbox selected"
name="tasks[{{ $task->id }}][checkbox]"
value="{{ $task->id }}"
checked>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="text"
class="input uk-input uk-width-1-1"
name="tasks[{{ $task->id }}][title]"
value="{{ old('title', isset($task->title)
? $task->title
: null) }}">
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<textarea class="input uk-textarea uk-width-1-1"
name="tasks[{{ $task->id }}][description]"
rows="1"
value="">{{ old('description', isset($task->description)
? $task->description
: null) }}</textarea>
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="number"
class="input uk-input"
name="tasks[{{ $task->id }}][budget]"
step="any"
value="{{ old('budget', isset($task->budget)
? $task->budget
: null) }}">
</div>
</div>
</td>
<td>
<div class="uk-margin">
<div class="uk-form-controls">
<input type="text"
class="input uk-input"
name="tasks[{{ $task->id }}]deadline"
value="{{ old('deadline', isset($task->deadline)
? $task->deadline
: null) }}">
</div>
</div>
</td>
<input class="input" type="hidden" name="project_id" value="{{ $project->id }}">
</tr>
$input = $request->all();
if(!empty($input['tasks']) && is_array($input['tasks']))
{
foreach ($input['tasks'] as $id => $task) {
// Create new task entry.
$new_task = new Task([
'project_id' => (integer) $input['project_id'],
'title' => $task['title'],
'description' => $task['description'],
'status' => (integer) 1,
'user_id' => (integer) 17,
'budget' => $task['budget'],
'deadline' => Carbon::parse($task['deadline'])->toDateString()
]);
// Find the project and attach the new task to the project.
$project = $cached_projects->find($project);
$project->tasks()->save($new_task);
}
// Flush cache.
Cache::tags('tasks')->flush();
// Set message and reload the tasks view.
setMessage('De taak is met succes toegevoegd aan het project.', 'success');
return redirect()->route('project.tasks', ['project' => $project->id]);
}
else
{
// Find the project.
$project = $cached_projects->find($project);
setMessage('Er zijn geen taken aan het project toegevoegd.', 'danger');
return redirect()->route('project.tasks', ['project' => $project->id]);
}