लारवेल अज्ञात कॉलम 'updated_at'


160

मैंने अभी लारवेल के साथ शुरुआत की है और मुझे निम्नलिखित त्रुटि मिली है:

अज्ञात कॉलम 'अद्यतन_त' को gebruikers में डालें (नाम, wachtwoord, updated_at, create_at)

मुझे पता है कि त्रुटि टाइमस्टैम्प कॉलम से है जब आप एक टेबल पर जाते हैं लेकिन मैं updated_atफ़ील्ड का उपयोग नहीं कर रहा हूं । मैंने इसका उपयोग तब किया था जब मैंने लारवेल ट्यूटोरियल का अनुसरण किया था लेकिन अब मैं अपना सामान बनाने (या बनाने का प्रयास) कर रहा हूं। भले ही मैं टाइमस्टैम्प का उपयोग नहीं करता, मुझे यह त्रुटि मिलती है। मुझे वह जगह नहीं मिल रही है जहां इसका उपयोग किया जा रहा है। यह कोड है:

नियंत्रक

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

मैं कुछ भूल रहा हूँ ... मैं यहाँ क्या गलत कर रहा हूँ?


यदि आपके पास कॉलम अपडेट_एट है तो अपनी तालिका देखें !
मेहदी मघरौनी

@MehdiMaghrooni I न।
लोको

और यही समस्या है, आप उस कॉलम को एक्सेस करना चाहते हैं जो मौजूद नहीं है। आप या तो एक को जोड़ने के लिए अपनी तालिका को बदल देंगे, या बस उस एक को हटा देंगे।
यांग

@bad_boy Im मेरे कोड में कहीं भी update_at का उपयोग नहीं कर रहा है।
लोको

@bad_boy मुझे सिर्फ मॉडल में झूठ पर टाइमस्टैम्प लगाना था ...
लोको

जवाबों:


426

मॉडल में, नीचे दिए गए कोड को लिखें;

public $timestamps = false;

यह काम करेगा।

स्पष्टीकरण: डिफ़ॉल्ट रूप से लार्वा आपकी तालिका में create_at & updated_at कॉलम की अपेक्षा करेगा। इसे गलत बनाने से यह डिफ़ॉल्ट सेटिंग को ओवरराइड कर देगा।


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
एडम

जब तक यह ऑडिट उद्देश्यों के लिए नहीं है, मैं यह नहीं देख रहा हूं कि इसके साथ शुरू करना क्यों आवश्यक है, संभवतः डिफ़ॉल्ट रूप से बंद कर दिया जाना चाहिए और एक विकल्प के रूप में सक्षम होना चाहिए।
ओजजीइंटजेंट

24

टाइमस्टैम्प को झूठे तरीके से सेट करने का मतलब है कि आप create_at और updated_at दोनों को खोते जा रहे हैं जबकि आप अपने मॉडल में दोनों कीज़ सेट कर सकते हैं।

मामला एक:

आपके पास created_atकॉलम है, लेकिन अपडेट नहीं है। आप बस updated_atअपने मॉडल में गलत सेट कर सकते हैं

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;

3
यह सही उत्तर होना चाहिए। टाइमस्टैम्प स्थापित करना दोनों क्षेत्रों को दूर करता है। धन्यवाद!!!
समीरा के

3
प्रश्न में दिखाई गई त्रुटि में सिर्फ अपडेट_ट फील्ड के कारण यह सही उत्तर है।
एंड्रेस फेलिप

1
यह उत्तर सबसे अच्छा है
Mojtaba

15

एलेक्स और समीर द्वारा अच्छा जवाब, लेकिन शायद अतिरिक्त जानकारी क्यों डालनी आवश्यक है

public $timestamps = false;

टाइमस्टैम्प आधिकारिक लारावेल पेज पर अच्छी तरह से समझाया गया है :

डिफ़ॉल्ट रूप से, Eloquent आपके> तालिकाओं पर मौजूद_at और updated_at कॉलम की उम्मीद करता है। यदि आप इन स्तंभों को स्वचालित रूप से प्रबंधित नहीं करना चाहते हैं, तो आपके मॉडल पर $ टाइमस्टैम्प की संपत्ति को गलत पर सेट करें।


14

जो लोग लार्वा 5 या इसके बाद के संस्करण का उपयोग कर रहे हैं, उन्हें सार्वजनिक संशोधक का उपयोग करना चाहिए, यह एक अपवाद फेंक देगा

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

public $timestamps = false;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.