এটি একটি কাঁচা অভিব্যক্তি দেওয়া, আপনি একটি কলামের জন্য একটি ডিফল্ট মান হিসাবে DB::raw()
সেট করতে ব্যবহার করা উচিত CURRENT_TIMESTAMP
:
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
এটি প্রতিটি ডাটাবেস ড্রাইভারের নির্বিঘ্নে কাজ করে।
নতুন শর্টকাট
লারাভেল 5.1.25 হিসাবে ( পিআর 10962 দেখুন এবং 15c487fe প্রতিশ্রুতি দিন ) আপনি useCurrent()
কলামের CURRENT_TIMESTAMP
ডিফল্ট মান হিসাবে সেট করতে নতুন কলাম পরিবর্তনকারী পদ্ধতিটি ব্যবহার করতে পারেন :
$table->timestamp('created_at')->useCurrent();
প্রশ্ন হলো, মাইএসকিউএল উপর আপনি ব্যবহার করতে পারে ফিরে যান ON UPDATE
মাধ্যমে দফা DB::raw()
:
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
Gotchas
মাইএসকিউএল
মাইএসকিউএল 5.7 দিয়ে শুরু করা, 0000-00-00 00:00:00
আর একটি বৈধ তারিখ হিসাবে বিবেচিত হবে না। লারাভেল ৫.২ আপগ্রেড গাইডে নথিভুক্ত হিসাবে , আপনি যখন আপনার ডাটাবেসে রেকর্ড সন্নিবেশ করবেন তখন সমস্ত টাইমস্ট্যাম্প কলামগুলির একটি বৈধ ডিফল্ট মান পাওয়া উচিত। useCurrent()
আপনার টাইমস্ট্যাম্পগুলি বর্তমান টাইমস্ট্যাম্পগুলিতে ডিফল্ট করতে আপনার স্থানান্তরগুলিতে (লারাভেল ৫.১.২৫ এবং উপরে থেকে) কলাম পরিবর্তনকারী ব্যবহার করতে পারেন , বা nullable()
নাল মানকে অনুমতি দেওয়ার জন্য আপনি টাইমস্ট্যাম্পগুলি তৈরি করতে পারেন ।
পোস্টগ্রেএসকিউএল এবং লারাভেল ৪.x
লারাভেল ৪.x সংস্করণে পোস্টগ্র্রেএসকিউএল ড্রাইভার টাইমস্ট্যাম্প মানগুলি সঞ্চয় করতে ডিফল্ট ডাটাবেস যথার্থতা ব্যবহার করছিল। CURRENT_TIMESTAMP
ডিফল্ট নির্ভুলতার সাথে কলামে ফাংশনটি ব্যবহার করার সময় , পোস্টগ্রেএসকিউএল উপলব্ধ উচ্চতর নির্ভুলতার সাথে একটি টাইমস্ট্যাম্প তৈরি করে, এইভাবে একটি ভগ্নাংশ দ্বিতীয় অংশের সাথে একটি টাইমস্ট্যাম্প তৈরি করে - এই এসকিউএল ফিডলটি দেখুন ।
এটি কার্বনকে একটি টাইমস্ট্যাম্প পার্স করতে ব্যর্থ করবে যেহেতু এটি মাইক্রোসেকেন্ডগুলি সংরক্ষণের আশা করবে না। আপনার অ্যাপ্লিকেশনটিকে এই অপ্রত্যাশিত আচরণটি ভঙ্গ করতে এড়াতে আপনাকে CURRENT_TIMESTAMP
নীচের মত স্পষ্ট করে ফাংশনটিতে একটি শূন্য স্পষ্টতা দিতে হবে :
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));
লারাভেল ৫.০ থেকে, timestamp()
কলামগুলি শূন্যের ডিফল্ট নির্ভুলতা ব্যবহার করতে পরিবর্তিত হয়েছে যা এড়ানো যায়।
মন্তব্যে এই ইস্যুটি দেখানোর জন্য @ ওয়ানড্রএইচএলকে ধন্যবাদ জানাই ।
DB::statement
উদাহরণের পরিবর্তে এটি ব্যবহার করুন , এটি অনেক সহজ।