2015-08-26 5 views
6

मेरे पास एक mysql डेटाबेस में एक टाइमस्टैम्प चर कॉलम है। कार्बन टाइमस्टैम्प को उस चीज़ पर कनवर्ट करने का प्रयास कर रहा हूं जिसे मैं वहां इनपुट कर सकता हूं, लेकिन Carbon::now() केवल कार्बन ऑब्जेक्ट देता है और जब मैं कार्बन ऑब्जेक्ट की टाइमस्टैम्प स्ट्रिंग का उपयोग करने का प्रयास करता हूं, तो यह mysql में पंजीकृत नहीं होता है।कार्बन दिनांक को mysql टाइमस्टैम्प में कनवर्ट करना।

public function store(CreateArticleRequest $request){ 
     $input = $request->all(); 
     var_dump($input); // JUST SO YOU CAN SEE 
     $input['published_at'] = Carbon::now(); 
     var_dump($input); // JUST SO YOU CAN SEE 
     Article::create($input); 
} 

मेरा पहला वर डंप इसलिए की तरह है:

array (size=4) 
    '_token' => string 'Wy67a4hWxrnfiGz61wmXfYCSjAdldv26wOJiLWNc' (length=40) 
    'title' => string 'ASDFasdf' (length=8) 
    'body' => string 'asdfasdf' (length=8) 
    'published_at' => string '2015-08-26' (length=10) 

मेरी दूसरी वर डंप इसलिए की तरह है।

"publ_at" से संबंधित mysql कॉलम एक टाइमस्टैम्प चर है। मुझे कार्बन ऑब्जेक्ट से इसे कैसे परिवर्तित करना है?

अग्रिम धन्यवाद।

+0

तिथि पर 'स्ट्रेटोटाइम' का उपयोग करें। – mdamia

उत्तर

-4

आप भी अपने मॉडल पर mutator सेट कर सकते हैं।

public function setPublishedAt($value) 
{ 
    $this->attributes['published_at'] = strtotime($value); 
} 

टाइमस्टैम्प के

$model -> setPublishedAt('2015-08-26'); // 1440572400 

कन्वर्ट करने के लिए या यदि आप बस का उपयोग कर strtotime

strtotime टाइमस्टैम्प के तारीख में बदल सकते हैं - एक यूनिक्स टाइमस्टैम्प में किसी भी अंग्रेजी शाब्दिक datetime विवरण के बारे में पार्स

इस सहायता की आशा करें।

+0

कि एक MySQL टाइमस्टैम्प नहीं है, जो यूनिक्स टाइमस्टैम्प है – AndrewMcLagan

3

समस्या अपनी तिथि स्ट्रिंग में है, उदाहरण के लिए, तो आप इस राशि:

public function setCrbDateAttribute($value) 
{ 
    $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value); 
} 

अब, अगर वहाँ 2014/10/12 की तरह एक तारीख है तो यह त्रुटि हो जाएगा क्योंकि घंटे और मिनट है लापता। तो आप सुनिश्चित करते हैं कि तिथि में सभी पार्स हैं और यह भी सुनिश्चित करें कि दिनांक स्ट्रिंग में शामिल है - एक विभाजक के रूप में नहीं /।

दूसरे शब्दों में, कार्बन का उपयोग करने से पहले $ मूल्य की जांच करें और सुनिश्चित करें कि आपकी तिथि स्ट्रिंग में विधि में उपयोग की गई वही स्वरूपित स्ट्रिंग है।

यह भी एक्सेसर विधि में होता है, तो दिनांक मान की जाँच पहले इससे पहले कि आप Carbon::createFromFormat().

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

उत्तर रेफरी:

Laravel/Carbon Timestamp 0000-00-00 00:00:00 or Unexpected data found. Unexpected data found. Data missing

3

संक्षिप्त उत्तर toDateTimeString() आप जो खोज रहे हैं, वह है:

$input['published_at'] = Carbon::now()->toDateTimeString(); 

अधिक विकल्पों के लिए http://carbon.nesbot.com/docs/ देखें, toDateString() सहित अगर आप सिर्फ तारीख हिस्सा है और समय नहीं चाहते हैं।

लेकिन इसे संभालने का एक बेहतर तरीका यह है कि लैरवेल को आपके लिए कार्बन ऑब्जेक्ट से दिनांक मूल्य कास्टिंग करने दें। https://laravel.com/docs/5.4/eloquent-mutators#date-mutators देखें।

संबंधित मुद्दे