У меня есть проект, основанный на Laravel 5.8, где я храню модель из проверенной формы Request, но я не могу понять, почему мне нужно так, чтобы она работала:
public function store(CotisationRequest $request)
{
$cotisation = new Cotisation();
$cotisation->fill($request->except('_token'));
if ($request->cheque) {
$cheque = Cheque::create($request->cheque);
$cotisation->cheque()->associate($cheque);
}
$cotisation->save();
return redirect()->route('cotisations.edit', ['cotisation' => $cotisation, 'membre' => $cotisation->membre]);
}
Существует модель def:
class Cotisation extends Model
{
protected $table = 'cotisations';
public $with = ['cheque', 'especes'];
public $fillable = [
'membre_id', 'cheque_id', 'annee', 'speciale',
'droits_entree',
'cotisation','don', 'montant', 'mode_paiement', 'statut'
];
...
}
А вот и просьба:
class CotisationRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'membre_id' => 'exists:membres,id',
'cotisation' => 'min:0|lte:montant',
'don' => 'min:0|lte:montant',
'droits_entree' => 'min:0|lte:montant',
'montant' => 'min:0|numeric',
'cheque.montant' => 'required_if:mode_paiement,CHQ|gte:montant',
'cheque.emetteur' => 'required_if:mode_paiement,CHQ',
'cheque.banque' => 'required_if:mode_paiement,CHQ',
'cheque.numero' => 'required_if:mode_paiement,CHQ',
'cheque.date_emission' => 'required_if:mode_paiement,CHQ|date|before_or_equal:today',
'annee' => Rule::unique('cotisations')->where(function($q) {
return $q->where('membre_id', $this->input('membre_id'));
}),
];
}
public function messages() {
return [
'membre_id.exists' => 'Le membre n° :input n\'a pas été trouvé.',
'cotisaton.min' => 'La cotisation minimale est de 0€.',
'cotisation.lte' => 'La cotisation doit être inférieure ou égale au montant total indiqué.',
'don.min' => 'Le don minimal est de 0€.',
'don.lte' => 'Le don doit être inférieur ou égal au montant total indiqué.',
'droits_entree.min' => 'Le droit d\'entrée minimal est de 0€.',
'droits_entree.lte' => 'Le droit d\'entrée doit être inférieur ou égal au montant total indiqué.',
'cheque.montant.required_if' => 'Le montant du chèque est requis.',
'cheque.montant.gte' => 'Le montant du chèque doit être égal ou supérieur au montant total indiqué.',
'cheque.emetteur.required_if' => 'L\'émetteur du chèque est requis.',
'cheque.banque.required_if' => 'La banque du chèque est requis.',
'cheque.numero.required_if' => 'Le numéro du chèque est requis.',
'cheque.date_emission.required_if' => 'La date d\'émission du chèque est requis.',
'cheque.date_emission.before_or_equal' => 'La date d\'émission du chèque doit être antérieure ou égale à aujourd\'hui.',
'annee.unique' => 'Une cotisation est déjà définie pour l\'année :input.',
];
}
}
Здесь я должен создать новый экземпляр, а затем заполнить его.
Если я попытаюсь сделать то же самое способом «:: create», будут заполнены только некоторые поля, и я не могу понять, почему, так как мой заполнитель установлен правильно.
Есть идеи? Спасибо за вашу помощь (код контроллера теперь работает, но я просто хотел бы понять, в чем моя ошибка).