#php #laravel #pivot-table
#php #laravel #сводная таблица
Вопрос:
Предыстория:
Laravel 8 Bootstrap 5
Я извлекаю список категорий лицензий из базы данных в форму.
В форме пользователю предлагается указать, какую лицензию назначить пользователю. (до этого момента я в порядке)
Цель
Я бы хотел, чтобы дата истечения срока действия лицензии была назначена каждой выбранной категории.
Код
blade.php
<div class="mb-1"><strong>Assign user's driving licence categories:</strong></div>
@foreach($categories as $category)
<div class="input-group mb-3">
<div class="input-group-text" style="width: 6ch !important;">{{$category->name}}</div>
<div class="input-group-text">
<input class="form-check-input" type="checkbox" name="categories[]" value="{{$category->id}}">
</div>
<div class="input-group-text">Expiry date</div>
<input class="form-control" type="date" name="expiry_date[]">
</div>
@endforeach
миграция сводной таблицы
public function up()
{
Schema::create('driving_licence_category_user', function (Blueprint $table) {
$table->id();
$table->string('driving_licence_category_id');
$table->string('user_id');
$table->string('expiry_date')->nullable();
$table->timestamps();
});
}
Модели
Пользователь
public function drivingLicenceCategory()
{
return $this->belongsToMany('AppModelsDrivingLicenceCategory')
->withPivot('expiry_date')
->withTimestamps();
}
Лицензия
public function userHasDrivingLicenceCategory()
{
return $this->belongsToMany('AppModelsUser');
}
Пользовательский контроллер
public function store(Request $request)
{
$request->validate([
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required',
'roles' => 'required',
'categories' => 'required',
'expiry_date' => 'required'
]);
$user = User::create($request->except(['roles', 'categories', 'expiry_date']))
->syncRoles($request->roles)
->drivingLicenceCategory()->sync($request->only('categories'));
//missing code to store the expiry_date information
return redirect()->route('users.index')->with('success', 'User added successfully.');
}
Спасибо, что потратили время на этот пост 🙂
Комментарии:
1. используйте updateExistingPivot() laravel.com/docs/8.x /…
2. Я мог бы использовать
$user->roles()->sync([1 => ['expires' => true], 2, 3]);
, но как получить запрос ввода для каждого флажка и поместить его в этот код??