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.