I have a Many To Many relationship between Food and Labels. The problem is that when I want to edit a food in the view to edit it, I want to retrieve the different assigned labels but these are collected in the creation view through a checkbox and I would like the marked checkbox to appear in the edit view.
Next I put the code that I am using:
-
AlimentoController:
public function create() { return view('Alimento/crear'); } public function store(Request $request) { $this-> validate($request, ['nombre'=>'required', 'kcal'=>'required', 'proteinas'=>'required', 'carbohidratos'=>'required','grasas'=>'required' ]); $etiqueta=new Etiqueta(); $alimento = new Alimento(); $alimento->nombre = $request->nombre; $alimento->kcal = $request->kcal; $alimento->grasas = $request->grasas; $alimento->proteinas=$request->proteinas; $alimento->carbohidratos=$request->carbohidratos; $etiqueta->etiqueta=$request->etiqueta; $alimento->etiquetas()->attach($etiqueta->id); $etiqueta->save(); $alimento->save(); } public function edit($id) { $alimento = Alimento::find($id); $etiquetas= $alimento->etiquetas(); return view ('Alimento/editar')->with(['alimento'=>$alimento, 'etiquetas'=>$etiquetas]); } public function update(Request $request, $id){ $this-> validate($request, ['nombre'=>'required', 'kcal'=>'required', 'proteinas'=>'required', 'carbohidratos'=>'required', 'grasas'=>'required' ]); $alimento = Alimento::find($id); $etiqueta = $alimento->etiquetas(); $alimento->nombre = $request->nombre; $alimento->kcal = $request->kcal; $alimento->grasas = $request->grasas; $alimento->proteinas=$request->proteinas; $alimento->carbohidratos=$request->carbohidratos; $etiqueta->etiqueta=$request->etiqueta; $etiqueta->save(); $alimento->save(); if($alimento->save()){ return redirect('alimentos'); }else{ return back()->with('nmsj','No se ha actualizado el alimento correctamente'); } }
-
Create-Food View (code portion to collect the labels):
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="pescados"><strong>Pescados y mariscos</strong></label>
</div>
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="carnes"><strong>Carnes y derivados cárnicos</strong></label>
</div>
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="huevos"><strong>Huevos</strong></label>
</div>
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="cereales"><strong>Cereales</strong></label>
</div>
- Edit-Food View (portion of code to retrieve labels)
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="pescados" {{$alimento->etiquetas()=='pescados' ? 'checked':''}}><strong>Pescados y mariscos</strong></label>
</div>
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="carnes" {{$alimento->etiquetas()=='carnes' ? 'checked':''}}><strong>Carnes y derivados cárnicos</strong></label>
</div>
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="huevos" {{$alimento->etiquetas()=='huevos' ? 'checked':''}}><strong>Huevos</strong></label>
</div>
<div class="checkbox">
<label><input type="checkbox" name="etiqueta" value="cereales" {{$alimento->etiquetas()=='cereales' ? 'checked':''}}><strong>Cereales</strong></label>
</div>
Thank you very much!