ali kiani
5 سال پیش توسط ali kiani مطرح شد
6 پاسخ

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

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


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
1

فیلد های 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
@a.kiani110 5 سال پیش مطرح شد
0

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

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


Mohammad
تخصص : Back-End developer
@mhmdkavosi 5 سال پیش مطرح شد
1

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


ali kiani
@a.kiani110 5 سال پیش مطرح شد
0

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


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش آپدیت شد
1

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

@a.kiani110

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

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

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

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


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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام