web-dev-qa-db-fra.com

Laravel Colonne inconnue 'updated_at'

Je viens de commencer avec Laravel et j'obtiens le message d'erreur suivant:

Colonne inconnue 'updated_at' insérée dans gebruikers (naam, wachtwoord, updated_at, created_at)

Je sais que l'erreur provient de la colonne timestamp lorsque vous migrez une table, mais je n'utilise pas le champ updated_at. J'avais l'habitude de l'utiliser quand je suivais le tutoriel Laravel mais maintenant que je fabrique (ou tente de créer) mes propres fichiers. Je reçois cette erreur même si je n’utilise pas d’horodatage. Je n'arrive pas à trouver l'endroit où il est utilisé. C'est le code:

contrôleur

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');
}

Route

Route::get('created', 'UserController@created');

Modèle

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;
}

Je dois oublier quelque chose ... Qu'est-ce que je fais mal ici?

129
Loko

Dans le modèle, écrivez le code ci-dessous;

public $timestamps = false;

Cela fonctionnerait.

345
Sameer Shaikh

Bonne réponse de Alex et Sameer, mais peut-être juste des informations supplémentaires sur pourquoi il est nécessaire de mettre

public $timestamps = false;

Les horodatages sont bien expliqués de manière officielle page Laravel :

Par défaut, Eloquent s'attend à ce que les colonnes created_at et updated_at existent sur vos> tables. Si vous ne souhaitez pas que ces colonnes soient automatiquement gérées par> Eloquent, définissez la propriété $ timestamps de votre modèle sur false.

12
marko424

Pour ceux qui utilisent laravel 5 ou plus, il faut utiliser le modificateur public autrement, une exception sera émise

Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)

public $timestamps = false;
12
Clean code

Définir l'horodatage sur false signifie que vous allez perdre à la fois created_at et updated_at, alors que vous pouvez définir les deux clés de votre modèle.

Cas 1:

Vous avez la colonne created_at mais pas update_at, vous pouvez simplement définir updated_at sur false dans votre modèle.

class ABC extends Model {

const UPDATED_AT = null;

Cas 2:

Vous avez les deux colonnes created_at et updated_at mais avec des noms de colonne différents.

Vous pouvez simplement faire:

class ABC extends Model {

const CREATED_AT = 'name_of_created_at_column';
const UPDATED_AT = 'name_of_updated_at_column';

Enfin, ignorant complètement les horodatages:

class ABC extends Model {

public $timestamps = false;
7
usrNotFound

Oui. Ecrivez

public $timestamps = false;
0
jesus martinez