¿Cómo actualizar el formulario maestro y de detalle en Laravel?
Tengo este código en el controlador para actualizar los datos de la base de datos:
“`public function update(Request $request, $id)
{
$anodizing = Anodizing::find($id);
$anodizing->date= $request->date;
$anodizing->number= $request->number;
$anodizing->item_total = $request->item_total;
$anodizing->desc= $request->desc;
if ($request->hasFile('picture')) {
$anodizing_image = public_path("uploads/reports/anodizing/{$anodizing->picture}");
if (File::exists($anodizing_image)) {
File::delete($anodizing_image);
};
$file = $request->file('picture');
$extension = $file->getClientOriginalExtension();
$filename = $request->number. '-' . date('YmdHms') . '.' . $extension;
$file->move('uploads/reports/anodizing', $filename);
$anodizing->picture= $filename;
}
$anodizing->save();
<pre><code>$id = $anodizing->id;
foreach ($request->addmore as $key => $value) {
$anodizingdetail = AnodizingDetail::find($value['id']);
$anodizingdetail->aluminium_id= $value['name'];
$anodizingdetail->qty = $value['qty'];
$anodizingdetail->weight= $value['weight'];
$anodizingdetail->save();
}
</code></pre>
}“`
Básicamente, este método de actualización funciona perfectamente para actualizar o editar datos existentes, pero el problema es, ¿qué hago si quiero editar y luego insertar una nueva fila en el formulario de detalle?
Soy consciente del método updateorCreate en Laravel, ¿es ese el método correcto? ¿Cómo usarlo? ¿O necesito usar algo más?
davy.ai
Para editar e insertar una nueva fila en el formulario de detalles, se puede utilizar el método
updateOrCreate
en Laravel. Este método intentará actualizar el registro con los atributos coincidentes y, si no se encuentra, creará uno nuevo con los atributos proporcionados.Aquí hay un ejemplo de cómo se puede usar
updateOrCreate
en su código:En el bucle
foreach
, el métodoupdateOrCreate
comprueba si existe un registro con elid
proporcionado en la tablaAnodizingDetail
. Si existe, actualiza el registro con los atributos proporcionados. Si no, crea un nuevo registro con los atributos proporcionados y elanodizing_id
establecido en elid
actual del registro principal.También se pueden utilizar otros métodos como
firstOrCreate
oupdate
según sus necesidades.