راکت

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

2 پاسخ

من در حال طراحی یک سایت برای یک آژانس هواپیمایی هستم برای یکی از بخش های وب سایت نیازدارم لیست قارها و کشورها و شهرها و ... رو که قبلا به صورت پدر و فرزند در یک جدول ذخیره کردم رو در بیارم و در نهایت فقط کشورهایی رو نشون بدم که برای اونها تور ثبت شده .

صفحه من به این صورت کار می کنه که اگر من این آدرس رو فراخونی کنم
www.mywebsite.com/packages/asia

این فانکشن اجرا میشه

    public function packageOfLocation($slug)
    {
        $location = Location::whereSlug($slug)->hideHidden()->first();
        if(count($location->children)>0)
        {
            $this->getNotEmptyChildLocations($location);
            $categories = array_unique($this->childLocations);

        }else{
            $categories = $location;
        }

        return view('site.desktop.tour.packageList',compact('categories'));
    }

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

    public function getNotEmptyChildLocations($location)
    {
        foreach ($location->children as $child)
        {

            if(count($child->packages) > 0)
            {

                array_push($this->childLocations,$child->parent);

            }
            if(count($child->children) > 0)
            {
                $this->getNotEmptyChildLocations($child);
            }
        }
    }

مشکل من این بود که این کد به شدت تعداد کوئری ها رو بالا می برد برای حل این مشکل از متد with استفاده کردم که تعداد کوئری ها رو از 80 تا به 70
عدد رسوند ولی خوب فقط در یه سطح کار می کرد و برای اینکه توی همه سطحهای پایین تر رابطه زیر مجموعه رو بگیره مجبور شدم اینطوری کد نویسی کنم

        $location = Location::with('children.children.children.children','children.packages', 'children.children.packages','children.children.parent')->whereSlug($slug)->hideHidden()->first();

سوالم این هست که چطور این کار رو درست و اصولی انجام بدم . و راه حل بهتری هست ؟

ثبت پرسش جدید

پاسخ‌ها

2
علی
علی
@alif

تخصص: Laravel

یک پیکج وجود داره بنام laravel nested set
بهترین پکیجی هست که من دیدم تا الان
مشکلتون رو حل میکنه

رضا رستمی
رضا رستمی
@incode.ir

@hesammousavi
سلام مهندس
خواهش این مورد رو توی دوره فعلی نود بیان کنین که بعد ها ما هم به این مشکل نخوریم
مرسی از شماااااااااا

شاید پاسخ شما همین‌جا باشد

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

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