Laravel 알 수없는 열 'updated_at'


160

방금 Laravel을 시작했으며 다음과 같은 오류가 발생합니다.

gebruikers에 알 수없는 열 'updated_at'삽입 (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;
}

뭔가 잊어 버려야합니다


당신이 열이있는 경우 테이블을 확인 updated_at을 !
Mehdi Maghrouni

@MehdiMaghrooni 나는 dont한다.
Loko

그리고 그것이 문제입니다. 존재하지 않는 열에 액세스하려고합니다. 테이블을 추가하여 테이블을 추가하거나 간단히 테이블을 제거해야합니다.
Yang

@bad_boy 내 코드의 어디서도 updated_at을 사용하지 않습니다.
Loko

@bad_boy 나는 방금 모델에서 타임 스탬프를 거짓으로 설정해야했다 ...
Loko

답변:


426

모델에서 아래 코드를 작성하십시오.

public $timestamps = false;

이 작동합니다.

설명 : 기본적으로 laravel은 테이블에 created_at & updated_at 열을 예상합니다. false로 설정하면 기본 설정보다 우선합니다.


7
@RameshPareek 그것은 문서 에서 설명됩니다 :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
Adam

이것이 감사 목적이 아닌 한, 이것이 왜 이것이 왜 필요한지 알지 못합니다. 기본적으로 꺼져 있고 옵션으로 활성화해야합니다.
OzzyTheGiant

24

타임 스탬프를 false로 설정하면 created_at 및 updated_at을 모두 잃는 반면 모델에서 두 키를 모두 설정할 수 있습니다.

사례 1 :

당신은이 created_at열을하지만 간단하게 설정할 수 없습니다 update_at updated_at모델 false로

class ABC extends Model {

const UPDATED_AT = null;

사례 2 :

당신은 모두가 created_atupdated_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;

3
이것이 정답이어야합니다. 타임 스탬프를 설정하면 두 필드가 모두 제거됩니다. 감사!!!
Sameera K

3
질문에 표시된 오류의 just_update_at 필드로 인한 정답입니다.
Andres Felipe

1
이 답변은 최고입니다
Mojtaba

15

Alex와 Sameer의 좋은 답변이지만, 왜 넣어야하는지에 대한 추가 정보

public $timestamps = false;

타임 스탬프는 Laravel 공식 페이지 에 잘 설명되어 있습니다 .

기본적으로 Eloquent는 created_at 및 updated_at 열이> 테이블에있을 것으로 예상합니다. > Eloquent가이 열을 자동으로 관리하지 못하게하려면 모델의 $ timestamps 특성을 false로 설정하십시오.


14

laravel 5 이상을 사용하는 사람들은 공개 수정자를 다른 방법으로 사용해야합니다. 예외가 발생합니다.

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

public $timestamps = false;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.