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?
Dans le modèle, écrivez le code ci-dessous;
public $timestamps = false;
Cela fonctionnerait.
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.
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;
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;
Oui. Ecrivez
public $timestamps = false;