هم از morilog استفاده کردم هم از verta ولی باز هم تاریخ میلادی بر گردوند اگه میشه یکم کامل تر توضیح بدید
@mariomesto12
سلام.
باید تاریخ ها رو cast کنید.
https://laravel.com/docs/7.x/eloquent-mutators#attribute-casting
public function getCreatedAtAttribute($value) {
return (new Verta($value));
}
در صورت استفاده از Verta این متد رو توی مدل مربوطه اضافه کنید.
$created_at = Article::getCreatedAtAttribute(Article::CREATED_AT);
Article::create([
'title' => $validate_data['title'],
'slug' => $validate_data['slug'],
'content' => $validate_data['content'],
'category' => $validate_data['category'],
'created_at' => $created_at
// 'article_image_path' => 'storage/app/Articlephotos/'.$filename,
]);
ارور داد
Unknown datetime 'created_at'
کجا رو دارم اشتباه میرم؟
@mariomesto12
اون خط اول رو اصلا نیاز نیست
وقتی اون رو توی مدل اضافه کنی اصن دیگه نیاز نیست این کار رو انجام بدی
فقط این کار رو بکن
$article = Article::find(1);
return $article->created_at;
خودش created_at رو تبدیل میکنه و برمیگردونه
حالا من اینطوری برای مثال نوشتم که ریترنش کنه. هرجای دیگه میتونی از همین created_at استفاده کنی
@mariomesto12
جان ؟ created_at رو بردین زیر سوال ؟
چه ربطی داره خب created_at یه فیلد دیتابیسه که ذخیره شده
شما با find یک سطر رو دریافت میکنین و بعد فیلد created_at اون رو استفاده می کنید.
منظورتون عمل create کردن هست ؟ منظورتون رو نمیفهمم
@mariomesto12 سلام وقتتون بخیر.
ببینید شما برای این که تاریخ میلادی رو به شمسی تبدیل کنید همونطور که دوستمون گفتن باید از پکیجی مثل Verta استفاده کنید. حالا برای این که تاریخ شمسی رو موقعی که modelی رو دریافت میکنید داشته باشید، میتونید کارای زیر رو بکنید.
یکیش همین متود پایینه:
public function getCreatedAtAttribute($value) {
return (new Verta($value));
}
خب حالا این متود چیکار میکنه ؟!
$article = Aritcle::findOrFail($id)
$article->created_at
اون created_at
که من از $article گرفتم، دقیقا همون مقداری که تابع getCreatedAtAttribute
بر میگردونه رو به شما میده. یعنی شما اگر داخل اون تابع مثلا استرینگ test
رو برگردونی تو همهی مدلها اون created_at
میشه test
.
حالا بعضی موقعها شاید با خودتون بگید که من میخوام هر وقت مدلی رو دریافت کردم هم تاریخ میلادی رو داشته باشم هم تاریخ شمسی.
برای این کار باید createdat رو بزارید باشه و یه کار دیگه کنید.
getCreatedAtShamsiAttribute
که این مقدار شمسی تاریخ رو برگردونه یعنی مثلا:
public function getCreatedAtShamsiAttribute() {
return new Verta($this->created_at)
}
اینجا متغیر $this میشه اون مدلی که دریافت میشه.
حالا از الان به بعد هر وقت این تابع رو صدا کنید میتونید مقدار createdatshamsi رو بگیرید.
اگر با خودتون میگید که نمیخواید هر دفعه این تابع رو صدا کنید و یا میخواید به عنوان attribute بهش دسترسی داشته باشید، یک متغیر $appends
باید تعریف کنید داخل مدل که برابر با یک آرایهست و attribute هایی که میخواید مستقیم به خود مدل اضافه بشن و فانکشنشون رو تعریف کردید این تو بزارید تو مثال ما میشه created_at_shamsi
پس نتیجه نهایی میشه این :
$appends =['created_at_shamsi']
public function getCreatedAtShamsiAttribute() {
return new Verta($this->created_at)
}
حالا اینطوری میتونید به تاریخ شمسی و میلادی دسترسی داشته باشید.
$article = Aritcle::findOrFail($id)
تاریخ میلادی
$article->created_at
تاریخ شمسی
$article->created_at_shamsi
فقط دقت کنید که موقعی که میخواید یک فیلد به دیتابیس اضافه کنید یا ... created_at
رو باید تاریخ میلادی بدید حتما و created_at_shamsi رو هم اگر استفاده کردید نیاز نیست مقدار بهش بدید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟