Acabo de comenzar con Laravel y aparece el siguiente error:
La columna desconocida 'updated_at' se inserta en gebruikers (naam, wachtwoord, updated_at, created_at)
Sé que el error es de la columna de marca de tiempo cuando migras una tabla pero no estoy usando el updated_at
campo. Solía usarlo cuando seguía el tutorial de Laravel, pero ahora que estoy haciendo (o intento hacer) mis propias cosas. Recibo este error aunque no uso marcas de tiempo. Parece que no puedo encontrar el lugar donde se está utilizando. Este es el código:
Controlador
public function created()
{
if (!User::isValidRegister(Input::all())) {
return Redirect::back()->withInput()->withErrors(User::$errors);
}
// Register the new user or whatever.
$user = new User;
$user->naam = Input::get('naam');
$user->wachtwoord = Hash::make(Input::get('password'));
$user->save();
return Redirect::to('/users');
}
Ruta
Route::get('created', 'UserController@created');
Modelo
public static $rules_register = [
'naam' => 'unique:gebruikers,naam'
];
public static $errors;
protected $table = 'gebruikers';
public static function isValidRegister($data)
{
$validation = Validator::make($data, static::$rules_register);
if ($validation->passes()) {
return true;
}
static::$errors = $validation->messages();
return false;
}
Debo estar olvidando algo ... ¿Qué estoy haciendo mal aquí?
Respuestas:
En el modelo, escriba el siguiente código;
Esto funcionaria.
Explicación: Por defecto, laravel esperará la columna created_at & updated_at en su tabla. Al hacerlo en falso, anulará la configuración predeterminada.
fuente
By default, Eloquent expects created_at and updated_at columns to exist on your tables. If you do not wish to have these columns automatically managed by Eloquent, set the $timestamps property on your model to false
Establecer marcas de tiempo en falso significa que va a perder tanto created_at como updated_at, mientras que puede configurar ambas claves en su modelo.
Caso 1:
Tiene una
created_at
columna pero no update_at que simplemente podría establecerupdated_at
en falso en su modeloCaso 2:
Tienes ambas
created_at
yupdated_at
columnas pero con diferentes nombres de columnaSimplemente podrías hacer:
Finalmente ignorando las marcas de tiempo por completo:
fuente
Buena respuesta de Alex y Sameer, pero tal vez solo información adicional sobre por qué es necesario poner
Las marcas de tiempo se explican muy bien en la página oficial de Laravel :
fuente
Para aquellos que usan laravel 5 o superior, deben usar un modificador público; de lo contrario, arrojará una excepción
fuente