Acabo de empezar con Laravel y me da el siguiente error:

Desconocido columna «updated_at» insertar en gebruikers (naam, wachtwoord,
updated_at, created_at)

Sé que el error es de la columna de marca de tiempo al migrar de una tabla pero no estoy utilizando el updated_at campo. Yo lo usaba cuando he seguido la Laravel tutorial, pero ahora que estoy haciendo (o intentando hacer) mis propias cosas. Me sale este error, aunque yo no uso marcas de tiempo. Me parece que no puede encontrar el lugar donde se está utilizando. Este es el código:

Controlador de

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', '[email protected]');

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 de algo… ¿Qué estoy haciendo mal aquí?

  • revise su tabla si usted tiene la columna updated_at !
  • Yo no.
  • Y ese es el problema, que desee acceder a la columna, que no existe. Tampoco tienes que modificar la tabla para agregar uno, o simplemente quita que uno.
  • Im ni siquiera utilizando updated_at en cualquier parte de mi código.
  • Yo sólo tenía que poner la fecha y hora en falso en el modelo de…
InformationsquelleAutor Loko | 2015-02-02

4 Comentarios

  1. 369

    En el modelo, escriba el código de abajo;

    public $timestamps = false;

    Que esto iba a funcionar.

    Explicación : Por defecto laravel espera created_at & updated_at columna en la tabla.
    Por lo que es falso que se anula la configuración predeterminada.

    • podría usted por favor, describa un poco de por qué funciona?
    • Se afirma en el docs: 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
  2. 12

    Para aquellos que están usando laravel 5 o más deben de uso público modificador de otro modo se producirá una excepción

    Access level to App\yourModelName::$timestamps must be
    public (as in class Illuminate\Database\Eloquent\Model)
    
    public $timestamps = false;
  3. 12

    Bonita respuesta por parte de Alex y Sameer, pero tal vez sólo información adicional sobre por qué es necesario poner

    public $timestamps = false;

    Las marcas de tiempo están muy bien explicados en oficial Laravel página:

    Por defecto, Elocuente espera created_at y updated_at columnas que existen en su >tablas. Si usted no desea que estas columnas gestionadas automáticamente por >Elocuente, establecer el $marcas de hora de propiedad sobre su modelo a false.

  4. 11

    Configuración de marcas de tiempo a false significa que usted va a perder tanto created_at y updated_at mientras que usted puede establecer tanto una de las claves en el modelo.

    Caso 1:

    Tiene created_at columna, pero no update_at usted podría simplemente un conjunto de updated_at a false en el modelo de

    class ABC extends Model {
    
    const UPDATED_AT = null;

    Caso 2:

    Tiene tanto created_at y updated_at columnas, pero con diferentes nombres de columna

    Usted podría simplemente hacer:

    class ABC extends Model {
    
    const CREATED_AT = 'name_of_created_at_column';
    const UPDATED_AT = 'name_of_updated_at_column';

    Finalmente, ignorando las marcas de tiempo completo:

    class ABC extends Model {
    
    public $timestamps = false;
    • esta debe ser la respuesta correcta. Configuración de las marcas de tiempo quita los dos campos. Gracias!!!
    • Esta es la respuesta correcta debido a la updated_at campo en el error mostrado en la pregunta.
    • Esta respuesta es la mejor

Dejar respuesta

Please enter your comment!
Please enter your name here