Je viens de commencer avec Laravel et j'obtiens l'erreur suivante:
Insertion de la colonne inconnue 'updated_at' dans gebruikers (naam, wachtwoord, updated_at, created_at)
Je sais que l'erreur provient de la colonne d'horodatage lorsque vous migrez une table mais je n'utilise pas le updated_at
champ. J'avais l'habitude de l'utiliser quand je suivais le tutoriel Laravel mais maintenant que je fais (ou tente de faire) mes propres trucs. J'obtiens cette erreur même si je n'utilise pas d'horodatage. Je n'arrive pas à trouver l'endroit où il est utilisé. Voici le code:
Manette
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 de mal ici?
Réponses:
Dans le modèle, écrivez le code ci-dessous;
Cela fonctionnerait.
Explication: Par défaut, laravel attendra la colonne created_at & updated_at dans votre table. En le définissant sur false, il remplacera le paramètre par défaut.
la source
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
Définir les horodatages sur false signifie que vous allez perdre à la fois created_at et updated_at alors que vous pouvez définir les deux clés dans votre modèle.
Cas 1:
Vous avez une
created_at
colonne mais pas update_at, vous pouvez simplement définirupdated_at
sur false dans votre modèleCas 2:
Vous avez à la fois
created_at
etupdated_at
colonnes mais avec des noms de colonnes différentsVous pouvez simplement faire:
Enfin en ignorant complètement les horodatages:
la source
Belle réponse d'Alex et Sameer, mais peut-être juste des informations supplémentaires sur pourquoi il est nécessaire de mettre
Les horodatages sont bien expliqués sur la page officielle de Laravel :
la source
Pour ceux qui utilisent laravel 5 ou plus, ils doivent utiliser le modificateur public sinon cela lèvera une exception
la source