У меня есть 4 поля: идентификатор, имя, преном, date_naissance. Когда я вставляю запись в свой phymyadmin, у меня нет проблем с файлом date_naissance.
Однако, когда я пытаюсь вставить date_naissance в форму вставки, у меня появляется сообщение об ошибке.
SQLSTATE[HY000]: General error: 1364 Field 'date_naissance' doesn't have a default value (SQL: insert into
eleves(nom,prenom,updated_at,created_at) values (Benoit, Piret, 2019-03-07 22:31:24, 2019-03-07 22:31:24))
Ты видишь проблему ?
public function create()
{
return view('admin.eleves.create', compact('eleves'));
}
public function store(Request $request)
{
$request->validate([
'nom' => 'required|string',
'prenom' => 'required|string',
'date_naissance' => 'required|date'
]);
Eleve::create($request->all());
return redirect()->route('eleves.index')
->with('success', 'save');
}
Мой вид создать
<form class = "panel-body" action = "{{route('eleves.store')}}" method = "POST">
@csrf
<fieldset class = "form-group">
<label for = "form-group-input-1">Nom</label>
<input type = "text" name = "nom" class = "form-control" id = "form-group-input-1">
</fieldset>
<fieldset class = "form-group">
<label for = "form-group-input-1">Prénom</label>
<input type = "text" name = "prenom" class = "form-control" id = "form-group-input-1">
</fieldset>
<fieldset class = "form-group">
<label for = "form-group-input-1">Date naissance</label>
<input type = "date" name = "date_naissance" class = "form-control" id = "form-group-input-1">
</fieldset>
<a href = "{{route('eleves.index')}}" class = "btn btn-primary pull-right">Back</a>
<button type = "submit" class = "btn btn-sm btn-primary">Valider</button>
</form>
Модель:
class Eleve extends Model
{
//
protected $fillable = ['nom', 'prenom'];
protected $dates = ['date_naissance'];
Убедитесь, что в схеме таблицы разрешены нули для date_naissance, если только вы не можете подтвердить, что у нее всегда будет дата.
Можешь распечатать свой $request->all() и показать? Проверьте результат дампа и убедитесь, что вы разрешаете нулевое значение по умолчанию для date_naissance.
@ArSeN: я отредактировал свое первое сообщение... спасибо
Я думаю, у вас есть массив $fillable в Eleves модели, а date_naissance там нет
@user11124425 user11124425 хорошо, спасибо, но на самом деле это мало что показывает, так как нет полей ввода (которые будут отправлены при отправке формы), как бы то ни было, можете ли вы показать форму оказанный?
@Daniel G: У него всегда должна быть дата
@ArSeN: Действительно, я редактировал...
@user11124425 user11124425, как уже указал Shuyi, если вы хотите заполнить его, что вы делаете с Eleve::create($request->all());, вам также придется добавить ключ date_naissance в свойство $fillable
@SundarBan: я вижу это, array:1 [▼ 0 => array:4 [▼ "_token" => "krCfSEdmggz3yKLf1DHNoXLqEGAmSi9r532Gto2z" "nom" => "Leroi" "prenom" => "Mathieu" "date_naissance" => "1990-01-01" ] ]
@ ArSeN: спасибо, Арсен :-)






В вашей модели
class Eleve extends Model
{
//
protected $fillable = ['nom', 'prenom','date_naissance']; // missing date_naissance here.
protected $dates = ['date_naissance'];
Вам нужно будет указать в модели атрибут fillable или guarded, так как все модели Eloquent по умолчанию защищают от массового назначения.
Fillable вы указываете, какие поля массово назначаются в вашей модели, вы можете сделать это, добавив в модель специальную переменную $fillable. Так что в модель нужно добавить еще и date_naissance:
class Eleve extends Model {
protected $fillable = ['nom', 'prenom','date_naissance']; //only the field names inside the array can be mass-assign
protected $dates = ['date_naissance'];
}
Подробнее: здесь легко понять Что означает «массовое назначение» в Laravel
можешь показать код своего представления (формы)? Похоже, вы не передаете поле с именем
date_naissance, и SQL не знает, как добавить значение по умолчанию, поэтому выдает ошибку