web-dev-qa-db-ja.com

Laravel不明な列 'updated_at'

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;
}

私は何かを忘れているに違いありません...ここで何が間違っていますか?

125
Loko

モデルで、以下のコードを記述します。

public $timestamps = false;

これは動作します。

327
Sameer Shaikh

AlexとSameerによるいい答えですが、たぶん追加する必要がある理由に関する追加情報

public $timestamps = false;

タイムスタンプは公式 Laravelページ でうまく説明されています:

デフォルトでは、Eloquentはテーブルにcreated_atおよびupdated_at列が存在することを期待しています。これらの列を> Eloquentで自動的に管理したくない場合は、モデルの$ timestampsプロパティをfalseに設定します。

12
marko424

Laravel 5以上を使用している場合、それ以外の場合はpublic修飾子を使用する必要があり、例外をスローします

Access level to App\yourModelName::$timestamps must be
public (as in class Illuminate\Database\Eloquent\Model)

public $timestamps = false;
12
Basheer Ahmed

タイムスタンプを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;
4
usrNotFound

はい。書くだけ

public $timestamps = false;
0
jesus martinez