Ali
6 سال پیش توسط Ali مطرح شد
4 پاسخ

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

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

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

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

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

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


ثبت پرسش جدید
developer
تخصص : برنامه نویس
@developer 6 سال پیش آپدیت شد
0

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

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

            }

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


Ali
تخصص : مثلا برنامه نویس
@ali.r 6 سال پیش آپدیت شد
0

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

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

    }

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

 return  $city->$category->books()->latest()->paginate(12);

developer
تخصص : برنامه نویس
@developer 6 سال پیش مطرح شد
1

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

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;
    }

Ali
تخصص : مثلا برنامه نویس
@ali.r 6 سال پیش مطرح شد
0

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

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

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


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

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