آفلاین
user-avatar

رابطه ها در لاراول

2 سال پیش
توسط Ali آپدیت شد
آفلاین
user-avatar
Ali ( 5119 تجربه )
2 سال پیش
تخصص : مثلا برنامه نویس

سلام من یک فرم دارم که امکان انتخاب دسته بندی و شهر رو داره که از طریق sync اقدام به ثبت اطلاعات میکنم حالا
میخوام اطلاعاتی برگردانم که دسته بندی و شهر انتخاب شده من به ترتیب زیر

http://localhost:8000/city/tehran/category/laravel

روت رو به این ترتیب تعریف کردم

Route::get('/city/{city}/category/{category}' , 'HomeController@index');

حالا توی controller چطور باید عمل کرد که اطلاعاتی رو برگردونه که دسته بندی و شهر مورد نظر انتخاب شده باشه از رابطه belongsToMany استفاده کردم اگر بخوام یک مورد مثلا دسته بندی رو برگردونم مشکلی وجود نداره اما به صورت جفت نمیدونم خیلی ممنون میشم کمک کنید

آفلاین
user-avatar
developer ( 33462 تجربه )
2 سال پیش
تخصص : برنامه نویس

خب توی کنترلر باید این دو تا رو دریافت کنی و روابط رو بسازی، اینطوری دریافت کنید:

            public function index(City $city, Category $category){

            }

البته میتونی به صورت پست هم ارسال کنی که دیگه توی url نیاد این اطلاعات

آفلاین
user-avatar
Ali ( 5119 تجربه )
2 سال پیش
تخصص : مثلا برنامه نویس

@alirezasafdari
روابط رو ساختم چطور باید این دوتا رو دریافت کنم برای تکی از کد زیر استفاده میکنم

    public function index(City $city , Category $category)
    {
        return  $city->books()->latest()->paginate(12);

    }

حالا جفت اطلاعات بخوام برگردونم چیکار باید کرد
اینجوری که نمیشه

 return  $city->$category->books()->latest()->paginate(12);
آفلاین
user-avatar
developer ( 33462 تجربه )
2 سال پیش
تخصص : برنامه نویس

نمیدونم میخواین چیکار کنید ولی اگه هدفتون اینه کتابهایی رو برگردونید که فلان موضوع و شهر رو دارند بهتره سرچ کنید
روت رو ساده بذارید بدون پارامتر، کنترلر هم ساده اینجوری:

public function index()
    {
        $books = Book::filter()->paginate(12);
        return View('', compact('books'));
    }

توی مدل هم فیلتر رو بنویسید مثلا اینجوری:

public function scopeFilter($query)
    {
        $city = request('city');
        $category = request('category');
        if (isset($category) && trim($category) != '') {
            $query->whereHas('category', function ($query) use ($category) {
                $query->whereId($category);
            });
        }
        if (isset($city) && trim($city) != '') {
            $query->whereHas('city', function ($query) use ($city) {
                $query->whereId($city);
            });
        }
        return $query;
    }
آفلاین
user-avatar
Ali ( 5119 تجربه )
2 سال پیش
تخصص : مثلا برنامه نویس

من فیلتر نمیخوام کنم منظورم درست متوجه نشدید من یک بار دیگه توضیح بدم من یک سایت دارم که مخاطب میاد کتاب توی اون ارسال میکنه توی فرمی که این عملیات رو انجام میدهد دو select وجود داره یک نام استان دوم دسته بندی که از طریق attach یا sync این اطلاعات رو ذخیره میکند حالا وقتی مخاطب توی یک استان یک دسته بندی رو انتخاب کرد میخوام کتاب هایی نمایش داده بشود که متعلق به اون استان و اون دسته بندی باشه مثال ادرس زیر

http://localhost:8000/city/تهران/category/فلسفه

جناب مهندس یه راهنمایی میکنید من این مشکل رو بر طرف کنم @hesammousavi

برای ارسال پاسخ باید وارد سایت شوید