2015-12-29 20 views
8

नहीं बनाता है मेरे पास माइग्रेशन है जिसमें timestamps() विधि है, और फिर मेरे पास इस तालिका को बीज करने के लिए एक बीज है।लैरवेल टाइमस्टैम्प() CURRENT_TIMESTAMP

Schema::create('mytable', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title'); 
    $table->timestamps(); 
}); 

बीज इस तरह दिखता है:

DB::table('mytable')->insert([ 
    [ 
     'title' => 'My Awesome Title' 
    ] 
]); 

जब यह सब हो जाता है चलाने का उपयोग कर:

php artisan migrate:refresh --seed 

आइटम डाला जाता है, लेकिन created_at और updated_at के मूल्यों दोनों 0000-00-00 00:00:00 क्यों कर रहे हैं क्या वे सही ढंग से सेट नहीं हैं?

`created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', 
`updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', 

मैं इन योजनाओं चाहते हैं:

`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
+1

उपयोग सुवक्ता मॉडल Fluent इंटरफेस के बजाय रिकॉर्ड बनाने के लिए और वे सही ढंग से स्थापित किया जाना चाहिए। –

उत्तर

23

आप सुवक्ता का उपयोग नहीं कर आप अपने दम पर टाइम स्टांप डालने की आवश्यकता डेटा डालते हैं तो

यहाँ स्तंभ योजनाओं है कि यह बनाता है।

यदि आप का उपयोग करें:

$x = new MyTable(); 
$x->title = 'My Awesome Title'; 
$x->save(); 

आप टाइमस्टैम्प ठीक से जमा की जाएगी (बेशक आप MyTable मॉडल पहले बनाने की जरूरत)

संपादित

तुम सच में चाहते हैं आप कर सकते हैं बदलें:

$table->timestamps(); 

में:

$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP')); 
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')); 

और अगर आप इस तालिका के लिए मॉडल बनाते हैं, आप

$timestamps = false; 

यकीन सुवक्ता रास्ते में उन्हें सेट करने का प्रयास नहीं करेगा बनाने के लिए स्थापित करना चाहिए।

EDIT2

भी एक और महत्वपूर्ण मुद्दा नहीं है। यदि आप PHP से तालिकाओं में सेटिंग तिथियां और अन्य में MySQL में मिश्रण करते हैं तो आपको यह सुनिश्चित करना चाहिए कि PHP और MySQL दोनों में सटीक समान डेटाटाइम (और टाइमज़ोन) है या आपको उसी दिनांक तुलना का उपयोग करना चाहिए जैसा आपने रिकॉर्ड में सेट किया है (या तो MySQL या PHP)। अन्यथा जब क्वेरी चलाने आप उदाहरण

SELECT * FROM mytable WHERE DATE(created_at) = CURDATE() 

के लिए अप्रत्याशित परिणाम मिल सकता है यह उदाहरण 2015/12/29 के लिए हो सकता है क्योंकि पीएचपी सर्वर पर PHP तारीख

"SELECT * FROM mytable WHERE DATE(created_at) = '".date('Y-m-d")."'" 

गुजर साथ क्वेरी चलाने से अलग हो सकता है, लेकिन MySQL सर्वर पर 2015-12-30

+0

मुझे नहीं लगता कि यह मुद्दा है ... मैंने प्रश्न अपडेट किया ... –

+0

@GetOffMyLawn कृपया मेरे संपादन को देखें –

+0

ठीक है मेरे पास यह है (अभी टिप्पणी की गई है)। तो ऐसा ही किया जाना है, मैंने सोचा कि लार्वेल ऐसा करता। ठीक है –

0

यदि मैं टाइमस्टैम्प में बीजिंग कर रहा हूं और कारखाने में इसे स्थापित कर रहा हूं तो मैं कार्बन लाइब्रेरी का उपयोग करूंगा। आप कुछ इस तरह कर सकता है नहीं तो:

$timestamps = false; 

और मैं माइग्रेशन से $table->timestamps(); हटा अगर मैं इसका इस्तेमाल करने के लिए नहीं जा रहा हूँ।

0

बाद के संस्करणों के लिए, आप बस उपयोग कर सकते हैं। (source)

$table->timestamp('created_at')->useCurrent(); 
$table->timestamp('updated_at')->useCurrent(); 
संबंधित मुद्दे