ایجاد زمانبدی در لاراول

3 ماه پیش
توسط علی بیات آپدیت شد
ali kiani ( 1624 تجربه )
3 ماه پیش

میخوام یه رکورد دیتابیس توی تاریخی که فیلد created_at داره آپدیت بشه یا بهتر بگم میخوام توی اون تاریخ تاریخ انقضای یه تخفیف را از حالت فعال بردارم راهنمایی کنید مرسی

علی بیات ( 302037 تجربه )
3 ماه پیش
تخصص : توسعه دهنده ارشد وب

فیلد های created_at و updated_at در مدل ها در واقع Instance هایی از کتابخونه Carbon هستند و اگر مقادیر اونها رو var_dump کنید میبینید که در واقع یه شئ رو براتون برمیگردونه که خیلی جا ها هم مفید هست.

کاری که میتونید انجام بدید اینه:

  • یه مدل Coupon به سیستم اضافه کنید
  • یه فیلد مثلا expires_at به جدولتون اضافه کنید و داخل مدل به شکل زیر بهش بگید که این فیلد هم باید مثل created_at و updated_at باهاش برخورد بشه: ```
<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Coupon extends Model
{
    protected $dates = [
        'seen_at',
    ];
}

به این ترتیب نیازی نیست فیلدی رو هم آپدیت کنید .. موقعی که خواستید چک کنید آیا این کوپن فعال هست یا نه .. زمان حال رو با فیلد expires_at این مدل مقایسه میکنید.

ali kiani ( 1624 تجربه )
3 ماه پیش

مهندس جان من یه فیلد is_expire دارم که نشون میده یه کد تخفیفی هنوز فعاله یا نه حالا میخوام سر تاریخی که در فیلد expire_date مشخص میکنم is_expire مقدارش یک بشه یعنی غیرفعال

حالا راهنمایی کنید ممنون

Mohammad ( 12340 تجربه )
3 ماه پیش
تخصص : Back-End developer

سلام.
برای اینکار میتونین از کرون جاب استفاده کنین به این صورت که مثلا توی پایان هر روز اون کرون جاب بیاد و تخفیف هایی که تاریخ انقضاشون رد شده رو غیرفعال کنه.

ali kiani ( 1624 تجربه )
3 ماه پیش

با زمانبدی خود لاراول (scheduling) میتونم انجام بدم ؟
فرق زمانبندی در لاراول با کرن جاب چیه؟

سیدعلی موسوی ( 88896 تجربه )
3 ماه پیش
تخصص : سی شارپ و پی اچ پی

schedule یک متد هستش و برای اجرا کردنش یا باید دستور زیر رو بزنید یا براش کرون جاب بنویسید در فلان تایم این کد زیر رو اجرا کنه

php artisan schedule:run
 protected function schedule(Schedule $schedule)
    {
          $schedule->command('registered:users')
                   ->everyMinute();
    }

اگر آموزشش رو خواستی تویی همین اسایت در قسمت مقالات سایت میتونی بخونی و کار کنی
https://roocket.ir/articles/scheduled-tasks-in-laravel-shared-hosting

علی بیات ( 302037 تجربه )
3 ماه پیش
تخصص : توسعه دهنده ارشد وب

@a.kiani110

ببینید میشه از زمان بندی ها هم استفاده کرد اما این روش کمی ممکنه عجیب به نظر برسه.
در واقع شما نیاز به یه متد دارید که بررسی کنه که آیا این کوپن هنوز فعال هست یا نه.

به جای اتکا به فیلد is_expire در دیتابیس... میتونید یه متد مثلا isExpired تعریف کنید.
و کاری که این متد انجام میده یه مقایسه ساده است..
مثلا

function isExpired($coupon) {
    if ($copoun->expire_date > Carbon::now()) {
        return true;
    }
}

البته مسلما این تابع در سناریوی واقعی، کمی پیچیده تر هست..


اگر هم به هر دلیلی لازم دارید از فیلد is_expire در دیتابیس استفاده کنید. دوستان روش های scheduling رو توضیح دادند. یه کرون جاب می‌سازید که مثلا هر ۲۴ ساعت کوپن هایی که تاریخشون میگذره رو به حالت غیرفعال دربیاره.

برای ارسال پاسخ باید وارد سایت شوید