مدرس دوره علی شیخ
مدت دوره 20:55:46
تعداد ویدیو 106

وضعیت دوره : کامل شده
قیمت دوره : 999,000 599,000 تومان

دوره های پشنهادی

کامنت های ارزشمند شما:

برای ارسال کامنت ابتدا باید وارد سایت شوید

  • سلام و عرض ادب.
    بنده دارم همراه شما کد رو مینویسم و پیش میرم.
    چند قسمت بعد از پیاده سازی اسلاگ ها به تشابه نام در اسلاگ ها بر خوردم. و پس از بررسی متوجه شدم تابع makeSlug که شما نوشتید دو تا باگ داره:

    1. اگر ما یک محصول بسازیم و اون رو پاک کنیم (سافت دلیت میشه) اون محصول هنوز توی جدول وجود داره اما موقع ساخت محصول با نام مشابه، تابع makeSlug متوجه اون نمیشه و میخواد نام مشابه رو وارد دیتابیس کنه و خطای duplicate میده. پس باید از دستور Product::withTrashed() استفاده کنیم.

    2. ما اگر مثلا سه محصول داشته باشیم و یک محصول (به غیر از محصول آخری) رو از جدول به طور کامل حذف کنیم (هارد دلیت) باز هم موقع انتشار محصول با نام مشابه، تابع makeSlug چونکه فقط تعداد رو برمیگردونه، میخواد اسلاگ محصول جدید رو 2 بذاره در صورتی که این اسلاگ هنوز در دیتابیس موجود هست و خطا میده.

    پس از بررسی و رفع باگ به کمک هوش مصنوعی به کد زیر رسیدم که مشکلات بالا رو نداره:

    public function makeSlug($string)
    
    {
    $slug = slugify($string);

    $slugs = Product::withTrashed()
    ->where('slug', $slug)
    ->orWhere('slug', 'LIKE', $slug . '-%')
    ->pluck('slug')
    ->toArray();

    if (!in_array($slug, $slugs)) {
    return $slug;
    }

    $max = 0;

    foreach ($slugs as $existingSlug) {
    if (preg_match('/^' . preg_quote($slug, '/') . '-([0-9]+)$/', $existingSlug, $matches)) {
    $number = (int) $matches[1];

    if ($number > $max) {
    $max = $number;
    }
    }
    }
    return $slug . '-' . ($max + 1);
    }

  • سلام وقت بخیر
    چرا از تابع slug که خود لاراول داره استفاده نکردین فارسی رو هم ساپورت میکنه من امتحان کردم جواب داد

    \Illuminate\Support\Str::slug('رشته تستی', '-', null)

    • سلام وقت بخیر.
      برای اطمینان بیشتر از نوع کاراکتر و نیم فاصله بینشون

    • سلام وقت بخیر.
      ممکنه توی بعضی از حروف و اسپیس و نیم اسپیس به مشکل بخوره