Добавление задачи пользователю
Файл Task
<?
public function project()
{
return $this->belongsTo(Project::class, 'project_id', 'id');
}
public function owner()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
Код файла show.blade.php
@foreach($project->tasks as $key => $task)
<tr>
<td>{{ $task->owner->full_name }}</td>
<td>{{ $task->descriptions }}</td>
<td>Файлы и склад</td>
<td><input type="checkbox">Готов</td>
</tr>
<tr>
<td>{{ $task->owner->full_name }}</td>
<td>{{ $task->descriptions1 }}</td>
<td>Файлы и склад</td>
<td><input type="checkbox">Готов</td>
</tr>
<tr>
<td>{{ $task->owner->full_name }}</td>
<td>{{ $task->descriptions2 }}</td>
<td>Файлы и склад</td>
<td><input type="checkbox">Готов</td>
</tr>
<tr>
<td>{{ $task->owner->full_name }}</td>
<td>{{ $task->descriptions3 }}</td>
<td>Файлы и склад</td>
<td><input type="checkbox">Готов</td>
</tr>
@endforeach
Данный код выводит информацию о поставленных задач пользователю, но сделано все так что у меня на пользователя может максимально создаваться 15 задач, так как descriptions ячеек в таблице 15 штук.
Возможно ли сделать так чтобы очитстить базу от статического кол-ва задач, и ставить их неограниченное число.
Вот сам форма добавления задачи
html = '<div class="card col-3 task" data-id="'+data.id+'">\n' +
' <div class="card-body">\n' +
' <h5 class="card-title">'+data.text.split(' - ')[0]+'</h5>\n' +
' <h6 class="card-subtitle mb-2 text-muted">'+data.text.split(' - ')[1]+'</h6>\n' +
' <div class="form-group">\n' +
' <label for="task-description">Задача</label>\n' +
' <textarea id="task-description" class="card-text form-control" name="descriptions['+data.id+']"></textarea>\n' +
' </div>\n' +
' <div class="form-group">\n' +
' <label for="task-start-date">Start Date</label>\n' +
' <input id="task-start-date" type="date" class="form-control" name="start_dates['+data.id+']">\n' +
' </div>\n' +
' <div class="form-group">\n' +
' <label for="task-end-date">End Date</label>\n' +
' <input id="task-end-date" type="date" class="form-control" name="end_dates['+data.id+']">\n' +
' </div>\n' +
' </div>\n' +
'</div>';
tasksSection.append(html);
Код из контроллера
foreach ($users as $user) {
Task::query()
->create([
'descriptions' => $descriptions[$user],
'descriptions1' => $descriptions1[$user],
'descriptions2' => $descriptions2[$user],
'descriptions3' => $descriptions3[$user],
'descriptions4' => $descriptions4[$user],
'descriptions5' => $descriptions5[$user],
'descriptions6' => $descriptions6[$user],
'descriptions7' => $descriptions7[$user],
'descriptions8' => $descriptions8[$user],
'descriptions9' => $descriptions9[$user],
'descriptions10' => $descriptions10[$user],
'descriptions11' => $descriptions11[$user],
'descriptions12' => $descriptions12[$user],
'descriptions13' => $descriptions13[$user],
'descriptions14' => $descriptions14[$user],
'start_date' => $tartDates[$user],
'end_date' => $endDates[$user],
'user_id' => $user,
'project_id' => $project->id
]);
Получается что я задачу когда ставлю ,в поле name выводиться следующий код
name="descriptions[5]"
в кв. скобках 5 принимает ID пользователя.
Выводить информацию таким образом будет не удобно да и как по мне не правильно (хотя я и не есть какой программист). Как правильно вывести данную информацию, не размножая код на 15 строк.
Код добавления задачи для пользователя
let selectBox = $('.js-example-basic-multiple'),
tasksSection = $('.tasks-section .tasks');
selectBox.select2();
selectBox.on('select2:select', function (e) {
let data = e.params.data,
html = '';
html = '<div class="card col-3 task" data-id="'+data.id+'">\n' +
' <div class="card-body">\n' +
' <h5 class="card-title">'+data.text.split(' - ')[0]+'</h5>\n' +
' <h6 class="card-subtitle mb-2 text-muted">'+data.text.split(' - ')[1]+'</h6>\n' +
' <div class="form-group">\n' +
' <div class="task-box"><label for="task-description">Задача 1</label>\n' +
' <textarea id="task-description" class="card-text form-control" name="descriptions['+data.id+']"></textarea></div>\n' +
' <button type="button" class="mt-2 task-btn btn btn-success btn-sm"><i class="fas fa-plus-circle"></i> Добавить</button></div>\n' +
' </div>\n' +
' <div class="form-group">\n' +
' <label for="task-start-date">Start Date</label>\n' +
' <input id="task-start-date" type="date" class="form-control" name="start_dates['+data.id+']">\n' +
' </div>\n' +
' <div class="form-group">\n' +
' <label for="task-end-date">End Date</label>\n' +
' <input id="task-end-date" type="date" class="form-control" name="end_dates['+data.id+']">\n' +
' </div>\n' +
' </div>\n' +
'</div>';
tasksSection.append(html);
});
Сделал сейчас вот такую форму.
@foreach($project->$users as $user)
<form method="POST" action="/project/{{ $project->id }}/showQuest">
{{ csrf_field() }}
<div class="form-group">
<label for="inputUser">Выбор пользователя</label>
<select id="inputUser" class="form-control">
<option selected>--- Список с пользователями в нутри ---</option>
<option>Вания</option>
</select>
</div>
<div class="form-group">
<lable name="description">Задача пользователю</lable>
<textarea class="form-control" rows="5" name="description" cols="50"></textarea>
</div>
<div class="form-group row">
<input class="form-control " type="date">
<div class="mx-auto">До</div>
<input class="form-control " type="date">
</div>
</form>
@endforeach
Попытался вывести данные : Результат нулевой. Далее сообразил что не написан контроллер для данной задачи.
Добавил код в ProjectController@show ()
$project = Project::query()
->with('owners')
->with('tasks')
->with('safes')
->findOrFail($id);
$files = $project->files;
$users = $request->get('users');
$descriptions = $request->get('descriptions');
$startDates = $request->get('start_dates');
$endDates = $request->get('end_dates');
$newSafeName = $request->get('new_safe_name');
$newSafeType = $request->get('new_safe_type');
$newSafeCount = $request->get('new_safe_count');
$newSafeUse = $request->get('new_safe_use');
if ($users) {
$project->owners()->attach($users);
foreach ($users as $user) {
Task::query()
->create([
'descriptions' => $descriptions[$user],
'start_date' => $startDates[$user],
'end_date' => $endDates[$user],
'user_id' => $user,
'project_id' => $project->id
]);
}
}
результат тот же, ошибка users as users. Подумав решил вызвать route:list в нем show изначально не мог иметь POST | PUT, только GET | HEAD . И что то я теперь не могу сообразить , если у меня эта форма находится в админке, и мне необходимо из Админки при просмотре проекта ставить задачу, то как мне это правильно сделать ? Но как это сделать ?
Ответы (1 шт):
По хорошему нужно изменить структуру таблицы task в БД. Я правильно понял, что у вас в таблице 15 полей (столбцов) с именами descriptions, descriptions1, ... descriptions15? Зачем 15 ячеек для однотипных данных. Более того, такая структура привела Вас к текущей проблеме - нельзя хранить более 15 задач на пользователя.
Если сделать по-человечески, то структура может быть такой:
id | user_id | project_id | description_name | start_date | end_date
Для каждой задачи пользователя - новая запись в эту таблицу. Таким образом у вас: 1) не будет храниться пустых значений для пользователей, у которых менее 15 задач, 2) не будет ограничений по количеству задач на пользователя.