Stack Overflow en español Asked on December 11, 2021
Estoy programando el CRUD de la user (modificada) en mi proyecto laravel (5.6) pero al actualizar un usuario me da conflictos con las fechas de registro/actualización, o al menos eso es lo que he alcanzado a entender luego de revisar varias consultas en la web.
Mi update:
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function update(Request $request)
{
$usuario = User::find($request['id']);
$usuario->id_role = $request['id_role'];
$usuario->name = $request['nom_usuario'];
$usuario->last_name = $request['ape_usuario'];
$usuario->rut_user = $request['rut_usuario'];
$usuario->telefono1 = $request['telefono1'];
$usuario->telefono2 = $request['telefono2'];
$usuario->email = $request['ema_usuario'];
$usuario->save();
return Redirect::to('/usuarios')->with('notice', 'El usuario ha sido modificado correctamente.');
}
Mi modelo:
<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function getListado(){
$usuarios = $this->join('roles', 'users.id_role', '=', 'roles.id_role')
->select('users.*', 'roles.des_role')
->orderBy('name', 'ASC');
return $usuarios;
}
}
Al añadir en el modelo el
public $timestamps = false;
Guarda pero no registra la fecha de actualización (que es el cometido de dicha declaración) Sin embargo, eso también necesito guardarlo, obviamente.
He estado recurriendo a éste recurso con mucha frecuencia últimamente, creo que es lo mas sano cuando estamos aprendiendo una nueva herramienta y no hallamos la respuesta indicada. Agradezco todas las orientaciones.
Comparto la solución, tal vez le sirva a alguien mas::: Efectivamente!!! El problema con sql server es que el tipo de dato "timestamp" como tal no existe, al crear una tabla, bien sea por migrations o sql, sql server lo toma como datetime, para que laravel funcione correctamente, el tipo de dato para todos los campos de fecha debe ser datetime2...
Gracias a todos por sus aportes!!!
Seguimos aprendiendo :)
Answered by Virginia on December 11, 2021
No tendrías por qué estar actualizando manualmente tu updated_at o created_at.
Si haces una modificación y el modelo no cambia, el updated_at no se actualizará, pero podrías perfectamente, si por X motivo quieres forzar ese cambio, hacer esto:
$tuModelo->touch();
Con eso se actualiza el updated_at.
Ahora bien, otra cosa que me preocupa en lo que veo, es que muestras el fillable de User y tienes esto:
protected $fillable = [
'name', 'email', 'password',
];
Eso significa, que si utilizas el ->save(); cualquier otra propiedad de tu modelo no se actualizará porque no está en el fillable. Y eso podría estar causando que no se actualice realmente tu modelo (en caso de que ni name, ni email ni password hayan cambiado) y que por eso no cambie el updated_at.
Te aconsejo agregar las otras propiedades del modelo (o columnas de la tabla) que se permitirán modificar, al $fillable. Te quedaría algo así:
protected $fillable = [
'name',
'email',
'password',
'id_role',
'last_name',
'rut_user',
'telefono1',
'telefono2'
];
O algo por el estilo según tus campos reales que desconozco.
Lo otro que me queda es preguntarte (pero dudo que sea el problema) es cómo creaste updated_at en tu migración. ¿La creaste así?
$table->timestamps();
Con eso creas el created_at y el updated_at. Lo importante es que sean dateTimes o timestamps para que no tengas problemas.
Answered by Julio Lago on December 11, 2021
Intenta agregar en el update:
public function update(Request $request)
{
$usuario = User::find($request['id']);
$usuario->id_role = $request['id_role'];
$usuario->name = $request['nom_usuario'];
$usuario->last_name = $request['ape_usuario'];
$usuario->rut_user = $request['rut_usuario'];
$usuario->telefono1 = $request['telefono1'];
$usuario->telefono2 = $request['telefono2'];
$usuario->email = $request['ema_usuario'];
$usuario->updated_at = CarbonCarbon::now(); //Agregas la fecha de actualización
$usuario->save();
return Redirect::to('/usuarios')->with('notice', 'El usuario ha sido modificado correctamente.');
}
Answered by Eduardo Díaz on December 11, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP