Я только что начал с Laravel, и я получил следующую ошибку:
Неизвестный столбец "updated_at" вставить в gebruikers (naam, wachtwoord, updated_at, created_at)
Я знаю, что ошибка возникает из столбца timestamp при переносе таблицы, но я не использую поле updated_at
. Я использовал его, когда я следил за учебником Laravel, но теперь, когда я делаю (или пытаюсь сделать) свои собственные вещи. Я получаю эту ошибку, хотя я не использую временные метки. Кажется, я не могу найти место, где оно используется. Это код:
контроллер
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::get('created', 'UserController@created');
модель
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;
}
Я должен кое-что забыть... Что я здесь делаю неправильно?
В модели напишите приведенный ниже код;
public $timestamps = false;
Это сработает.
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
Для тех, кто использует laravel 5 или выше, должен использовать общедоступный модификатор, иначе он будет генерировать исключение
Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)
public $timestamps = false;
Хороший ответ Алекс и Самир, но, может быть, просто дополнительная информация о том, почему необходимо поставить
public $timestamps = false;
Временные метки хорошо описаны на официальной странице Laravel:
По умолчанию Eloquent ожидает, что столбцы created_at и updated_at будут существовать в ваших> таблицах. Если вы не хотите, чтобы эти столбцы автоматически управлялись с помощью> Eloquent, установите для свойства $ timestamps на вашей модели значение false.
Установка временных меток в false означает, что вы потеряете как created_at, так и updated_at, тогда как вы можете установить оба ключа в своей модели.
Пример:
Случай 1: у вас есть created_at
колонки, но не update_at вы можете просто установить updated_at
ложь в вашей модели
class ABC extends Model {
const UPDATED_AT = null;
Случай 2: У вас есть как created_at
и updated_at
столбцы, но с разными именами столбцов, которые вы могли бы просто сделать:
class ABC extends Model {
const CREATED_AT = 'name_of_created_at_column';
const UPDATED_AT = 'name_of_updated_at_column';
Наконец, полностью игнорируя отметки времени
class ABC extends Model {
public $timestamps = false;
Надеюсь, это поможет Cheers !!!!
$id = put her id;
$update['user_id'] = $userId;
Use where(array('_id'=>$id))->pull($update);