راکت

بهبود کد توی relation های چند به چند لاراول

1 پاسخ

سلام دوستان من کد زیر رو برای جستجو توی relation های چند به چند نوشتم و کار میکنه.
میخوام لیست شغل های مربوط به یک کمپانی رو نمایش بدم. حالا هر کمپانی میتونه چنتا ادرس داشته باشه و هر کدوم از این ادرس ها میتونن چنتا شغل داشته باشن
ولی حس میکنم از نظر بهینه بودن مشکل داره و میشه بهترش کرد
اگه کسی بگه که چجوری بهترش کنم ممنون میشم

 $company = Company::find($id)->with('addresses.jobDetails.job')->first();
        $jobs = [];
        foreach ($company->addresses as $address) {
            foreach ($address->jobDetails as $detail) {
                array_push($jobs, [
                    'id' => $detail->job->id,
                    'title' => $detail->job->title,
                    'country' => $detail->job->country,
                    'city' => $detail->job->city,
                    'type' => $detail->job->type,
                    'work_types' => JobType::where('job_id',$detail->job->id)->pluck('title'),
                    'income' => $detail->income,
                ]);
            }
        }
        return $jobs;
ثبت پرسش جدید

پاسخ‌ها

1
میلاد خسروی
میلاد خسروی
@milwad

تخصص: برنامه نویس بامزه

سلام خسته نباشید
اگه از clean code و design pattern و solid چیزی بدونی خیلی کمکت میکنه
تو باید از repository pattern آستفاده کنی
و هر کدوم از این قسمت ها ببر توی متد جدا

 $company = Company::find($id)->with('addresses.jobDetails.job')->first();
        $jobs = [];
        foreach ($company->addresses->jobDetails  as $address) {
            foreach ($address as $detail) {
                array_push($jobs, [
                    'id' => $detail->job->id,
                    'title' => $detail->job->title,
                    'country' => $detail->job->country,
                    'city' => $detail->job->city,
                    'type' => $detail->job->type,
                    'work_types' => JobType::where('job_id',$detail->job->id)->pluck('title'),
                    'income' => $detail->income,
                ]);
            }
        }
        return $jobs;

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

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

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