Laravelで始めたばかりで、次のエラーが表示されます。
不明な列「updated_at」がgebruikersに挿入されます(naam、wachtwoord、updated_at、created_at)
テーブルを移行するときのタイムスタンプ列からのエラーであることは知っていますが、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;
これは動作します。
AlexとSameerによるいい答えですが、たぶん追加する必要がある理由に関する追加情報
public $timestamps = false;
タイムスタンプは公式 Laravelページ でうまく説明されています:
デフォルトでは、Eloquentはテーブルにcreated_atおよびupdated_at列が存在することを期待しています。これらの列を> Eloquentで自動的に管理したくない場合は、モデルの$ timestampsプロパティをfalseに設定します。
Laravel 5以上を使用している場合、それ以外の場合はpublic修飾子を使用する必要があり、例外をスローします
Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)
public $timestamps = false;
タイムスタンプをfalseに設定すると、created_atとupdated_atの両方が失われますが、モデルの両方のキーを設定できます。
ケース1:
created_at
列はありますがupdate_atはありません。モデルでupdated_at
を単にfalseに設定できます
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;
はい。書くだけ
public $timestamps = false;