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

3 سال پیش توسط رضا رستمی آپدیت شد
آفلاین
user-avatar
تیرداد ( 39388 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

صفحه من به این صورت کار می کنه که اگر من این آدرس رو فراخونی کنم
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();

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

آفلاین
user-avatar
علی ( 14261 تجربه )
3 سال پیش
تخصص : Laravel

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
رضا رستمی ( 1341 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

1

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

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.