Soy bastante nuevo en laravel y estoy tratando de actualizar un registro desde la entrada del formulario. Sin embargo, veo que para actualizar el registro, primero debe obtener el registro de la base de datos. No es posible algo como actualizar un registro (la clave principal está configurada):
$post = new Post();
$post->id = 3; //already exists in database.
$post->title = "Updated title";
$post->save();
Post::where('id',3)->update(['title'=>'Updated title']);
-
Confirmado, esta es la forma Elocuente de actualizar sin realizar una búsqueda
– Andy Blanco
19 mayo 2018 a las 20:53
-
Desearía que esta respuesta se mostrara primero, ya que es la respuesta correcta: use Eloquent, no Query Builder.
– Trevor
8 de febrero de 2019 a las 5:25
-
¿Esto se revierte si algo sale mal? Quiero decir, ¿esto está respaldado por
DB::beginTransaction()
?– Jonatán Lavado
17 de febrero de 2020 a las 20:43
-
por supuesto que funciona con un
DB::beginTransaction()
ya que es una sentencia que modifica la tabla, y el motor de la base de datos la interpretará como una transacción real.– Jeison Florez
17 de abril de 2020 a las 13:19
-
@Kajasb ¿Hay alguno para obtener este registro actualizado sin una nueva consulta?
– Assad Yaqoob
27 de agosto de 2021 a las 6:51
Simplemente puede usar Query Builder en lugar de Eloquent, este código actualiza directamente sus datos en la base de datos 🙂 Esta es una muestra:
DB::table('post')
->where('id', 3)
->update(['title' => "Updated Title"]);
Puedes consultar la documentación aquí para más información: http://laravel.com/docs/5.0/queries#updates
-
Un millón de gracias. Me alegraste el día.
– Amanjot Kaur
19 de julio de 2016 a las 9:03
-
no porque entonces pierdes tus marcas de tiempo y otros comportamientos del modelo
– Malhal
4 oct 2016 a las 16:08
-
@malhal desafortunadamente, no he encontrado ninguna solución para este caso arreglado usando Eloquent, porque Eloquent básicamente crea objetos para que cada fila pueda tener todas esas características. por lo tanto, actualizarlos sin cargar y actualizar cada fila es simplemente imposible. CMIIW
-Bagaskara Wisnu Gunawan
5 de octubre de 2016 a las 5:08
-
¿Cómo verifica, en este caso, si la fila dada se actualizó de hecho? Como un
if ($data->save())
?– Patros
22 de marzo de 2017 a las 21:36
-
@malhal vea la respuesta a continuación de KaJasB para cualquiera que quiera usar elocuente para la actualización.
-Bagaskara Wisnu Gunawan
17 de mayo de 2018 a las 5:37
harrrrrr
Usar propiedad exists
:
$post = new Post();
$post->exists = true;
$post->id = 3; //already exists in database.
$post->title = "Updated title";
$post->save();
Aquí está la documentación de la API: http://laravel.com/api/5.0/Illuminate/Database/Eloquent/Model.html
-
Honestamente, esto es un poco difícil de leer.
– Teoría de campo bajo
11 de agosto de 2021 a las 21:36
maztch
La forma común es cargar la fila para actualizar:
$post = Post::find($id);
En tu caso
$post = Post::find(3);
$post->title = "Updated title";
$post->save();
Pero en un paso (solo actualice) puede hacer esto:
$affectedRows = Post::where("id", 3)->update(["title" => "Updated title"]);
También puedes usar firstOrCreate
O firstOrNew
// Retrieve the Post by the attributes, or create it if it doesn't exist...
$post = Post::firstOrCreate(['id' => 3]);
// OR
// Retrieve the Post by the attributes, or instantiate a new instance...
$post = Post::firstOrNew(['id' => 3]);
// update record
$post->title = "Updated title";
$post->save();
Espero que te ayude 🙂
Esto será útil para los nuevos usuarios que tienen el mismo problema: scratchcode.io/database-records-update-in-laravel
– Mayank Dudakiya
1 de enero de 2021 a las 9:55