Właśnie zacząłem z Laravelem i otrzymuję następujący błąd:
Nieznana kolumna „updated_at” wstaw do gebruikers (naam, wachtwoord, updated_at, created_at)
Wiem, że błąd pochodzi z kolumny sygnatury czasowej podczas migracji tabeli, ale nie używam tego updated_at
pola. Używałem go, gdy korzystałem z samouczka Laravel, ale teraz robię (lub próbuję tworzyć) własne rzeczy. Otrzymuję ten błąd, mimo że nie używam znaczników czasu. Nie mogę znaleźć miejsca, w którym jest używany. To jest kod:
Kontroler
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');
}
Trasa
Route::get('created', 'UserController@created');
Model
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;
}
Muszę o czymś zapomnieć ... Co ja tu robię źle?
Odpowiedzi:
W modelu napisz poniższy kod;
To by zadziałało.
Wyjaśnienie: Domyślnie laravel będzie oczekiwał w Twojej tabeli kolumn created_at i updated_at. Ustawienie wartości false spowoduje nadpisanie ustawienia domyślnego.
źródło
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
Ustawienie znaczników czasu na false oznacza, że stracisz zarówno created_at, jak i updated_at, podczas gdy możesz ustawić oba klucze w swoim modelu.
Przypadek 1:
Masz
created_at
kolumnę, ale nie update_at, możesz po prostu ustawićupdated_at
w modelu wartość falsePrzypadek 2:
Masz zarówno kolumny, jak
created_at
i,updated_at
ale z różnymi nazwami kolumnMożesz po prostu zrobić:
Wreszcie całkowite ignorowanie sygnatur czasowych:
źródło
Dobra odpowiedź Alexa i Sameera, ale może tylko dodatkowe informacje o tym, dlaczego konieczne jest umieszczenie
Znaczniki czasu są ładnie wyjaśnione na oficjalnej stronie Laravel :
źródło
Dla tych, którzy używają laravel 5 lub nowszego, muszą użyć modyfikatora publicznego, w przeciwnym razie wyrzuci wyjątek
źródło