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

 laravel
  آخرین بروزرسانی : 6 سال پیش توسط آرمان بابایی
لینک کوتاه برای اشتراک گذاری:
علی محمدی ( 8 تجربه )
6 سال پیش

 3

سلام مجدد جناب بابایی

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

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

الان من یک روت تعریف کردم 

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

رابطه هم از نوع belongsToMany گذاشتم اگر بخوام مثلا پست هایی مربوط به یک شهر رو برگردونم از کد زیر استفاده میکنم

    public function index(City $city)
    {
        $Books= $city->Books()->latest()->paginate(20);
}

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

آرمان بابایی ( 354 تجربه )
6 سال پیش

شما باید در table مربوط به book دوتا ستون داشته باشید. یکی مربوط به id شهر و یکی id دسته بندی. و بعد به راحتی قابل انجام هست.

$book->where([["city_id" , 2],["category_id" , 12]])->paginate(20);

 

آرمان بابایی ( 354 تجربه )
6 سال پیش

دقیقا متوجه نشدم چی رو میخواید دو مورد برگردونید. ولی اگه منظورتون اینه هم میخواهید category و هم city در جستجو اعمال بشه باید از Join استفاده کنید.

DB::table('cities')->join('categories', 'cities.id', '=', 'categories.cities_id')->paginate(20);

نکته: در جدول category یک ستون ایجاد کنید که کد شهر(id شهر) توش ذخیره میشه. و با Join مشکلتون رو برطرف کنید.

 

علی محمدی ( 8 تجربه )
6 سال پیش

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

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

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

 public function index(City $city , Category $category)
    {
        $Books= $city->Books()->latest()->paginate(20);
    }

جناب بابایی مشکل اصلی من در کد بالا اینه که تنها از یک متغیر میتوانم استفاده کنم اگر از هر دو به عنوان مثال 

return $city->$category->advertisings()->latest()->paginate();

از این استفاده کنم اشتباه میباشد و با خطا روبرو میشود متاسفانه چند روز هست درگیر این خطا هستم نمیتوانم بر طرفش کنم.

نمونه بخوام براتون مثال بزنم مثل سایت دیوار

2024 © Copyright کليه حقوق مادی و معنوی براي چسبون محفوظ است و هرگونه کپی برداری پیگرد قانونی دارد.