Laravel Bilinmeyen Sütunu 'updated_at'


160

Laravel ile yeni başladım ve şu hatayı alıyorum:

Gebruikers'a bilinmeyen 'updated_at' sütunu ekle (naam, wachtwoord, updated_at, created_at)

Bir tabloyu taşıdığınızda hatanın zaman damgası sütunundan olduğunu biliyorum ama updated_atalanı kullanmıyorum . Laravel öğreticisini takip ettiğimde kullanıyordum ama şimdi kendi eşyalarımı yapıyorum (veya yapmaya çalışıyorum). Zaman damgası kullanmama rağmen bu hatayı alıyorum. Kullanıldığı yeri bulamıyorum. Bu kod:

kontrolör

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

Rota

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

Bir şey unutmalıyım ... Burada neyi yanlış yapıyorum?


updated_at sütununuz varsa tablonuzu kontrol edin !
Mehdi Maghrouni

@MehdiMaghrooni I dont.
Loko

Ve sorun bu, var olmayan sütuna erişmek istiyorsun. Ya tabloyu eklemek için tablonuzu değiştirmeniz ya da basitçe kaldırmanız gerekir.
Yang

@bad_boy Güncellenmiş_at kodumun hiçbir yerinde bile kullanmıyorum.
Loko

@bad_boy Sadece modelde zaman damgalarını yanlış koymak zorunda kaldım ...
Loko

Yanıtlar:


427

Modelde aşağıdaki kodu yazın;

public $timestamps = false;

Bu işe yarar.

Açıklama: laravel varsayılan olarak tablonuzda create_at & updated_at sütununu bekler. False değerine ayarlandığında, varsayılan ayar geçersiz kılınır.


7
@RameshPareek Belgelerde şöyle belirtiliyor :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

Bu denetim amaçlı olmadığı sürece, bunun neden başlamak için gerekli olduğunu anlamıyorum, muhtemelen varsayılan olarak kapatılmalı ve bir seçenek olarak etkinleştirilmelidir.
OzzyTheGiant

24

Zaman damgalarını false olarak ayarlamak, create_at ve updated_at değerlerini kaybedeceğiniz anlamına gelir, oysa modelinizdeki her iki anahtarı da ayarlayabilirsiniz.

Dava 1:

Sen var created_atsütunu ama sadece ayarlayabilirsiniz değil update_at updated_atModelinizdeki false

class ABC extends Model {

const UPDATED_AT = null;

Durum 2:

Her ikisine de sahip created_atve updated_atsütunları ama farklı sütun adları ile

Yapmanız gerekenler:

class ABC extends Model {

const CREATED_AT = 'name_of_created_at_column';
const UPDATED_AT = 'name_of_updated_at_column';

Son olarak zaman damgalarını tamamen görmezden gelmek:

class ABC extends Model {

public $timestamps = false;

3
bu doğru cevap olmalı. Zaman damgalarının ayarlanması her iki alanı da kaldırır. Teşekkürler!!!
Sameera K

3
Bu, soruda gösterilen hatadaki sadece updated_at alanı nedeniyle doğru cevaptır.
Andres Felipe

1
Bu cevap en iyisi
Mojtaba

15

Alex ve Sameer'ın güzel cevabı, ama belki de neden eklenmesi gerektiği hakkında ek bilgi

public $timestamps = false;

Zaman damgaları resmi Laravel sayfasında güzel bir şekilde açıklanmıştır :

Varsayılan olarak Eloquent,> tablolarınızda create_at ve updated_at sütunlarının bulunmasını bekler. Bu sütunların> Eloquent tarafından otomatik olarak yönetilmesini istemiyorsanız, modelinizdeki $ timestamps özelliğini false olarak ayarlayın.


14

Laravel 5 veya üstü kullananlara genel modifikasyon kullanmalıdır, aksi takdirde istisna atar

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

public $timestamps = false;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.