Paradox 3 گزارش دادن ارسال شده در بهمن 1 سلام وقت بخیر من میخام جستجو بر اساس فیلتر ایجاد کنم برای دو جدول کابران و جدول شهر ( که اینجا از روش چند به چند استفاده کردم و تو جدول منطقه user_id قرار داره اینجا مشکلی برای جستجو وجود نداره؟) برای جدول کاربران فیلدهایی که میخام فیلتر بشه از enum استفاده کردم (3 تا مقدار اول enum هستن ) اینجا به چه شکل باید تعریف کنم؟ تو این حالت فقط تو url نمایش میده و کاربر رو پیدا نمیکنه $user_query = User::query(); $city_query = City::query(); if($keyword = $request->get('search')){ $user_query->where('age_difference' , '=' , "{$keyword}")->where('time' , '=' , "{$keyword}")->where('disability' , '=' , "{$keyword}")->orWhereHas('cities' , function ($query) use ($keyword){ $query->where('name', 'like', "%{$keyword}%")->get(); }); } نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 تو همین بخش جستجو ساده بر اسا اسم کاربر انجام میدم تا قبل اضافه کردن کدهای بالا کار میکرد ولی الان برای جستو ساده ارور زیر رو دارم Call to undefined method App\Models\User::cities() چطوری توی روابط چند به چند میتونم این مشکل رو حل کنم ؟ وقتی کدهای مربوط به فیلتر رو کامنت میکنم درسته و مشکلی نداره این بخش نقل قول Share this post Link to post Share on other sites
saber 143 گزارش دادن ارسال شده در بهمن 1 منظورتون این هست که خود جدول شهرها با کاربران از طریق جدول مناطق ارتباط داره؟ و جدول شهر مستقیم ارتباطی به user نداره درسته؟ 1 نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 در 13 ساعت قبل، saber گفته است : منظورتون این هست که خود جدول شهرها با کاربران از طریق جدول مناطق ارتباط داره؟ و جدول شهر مستقیم ارتباطی به user نداره درسته؟ بله دقیقا منظورم همینه نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 به این شکل که نوشتم وقتی dd میگیرم کل مشخصات کاربری که فیلتر کردم میاره ولی در حالت عادی هیچ کاربری رو نمایش نمیده $users = User::where('status', true); if ($request->has('age_difference')) { $users->where('age_difference', '=', $request->age_difference); } if ($request->has('time')) { $users->where('time', '=' , $request->time); } if ($request->has('disability')) { $users->where('disability', '=' , $request->disability); } if ($request->has('name')) { $users->where(function ($query) use ($request) { $query->whereHas('cities', function ($query) use ($request) { $query->where('name', 'like', $request->name); }); }); } // dd($users->get()); نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 اینجا کل کاربران رو نمایش میده و دیگه فیلتری انجام نمیشه ولی وقتی dd میگیرم اطلاعات کاربری که فیلتر کردم رو نشون میده چرا نقل قول Share this post Link to post Share on other sites
saber 143 گزارش دادن ارسال شده در بهمن 1 باید روابط بین جداول رو اول ایجاد کنید بعد توی کوئریها ازشون استفاده کنید کلا روشهای مختلفی میشه به نتایج رسید ولی با روابط اول باید بین شهر و منطقه و کاربران روابطی رو که دارن ایجاد کنید مثلا به شکل زیر // User model public function region() : BelongsTo { return $this->belongsTo(Region::class); } =========================== // City model public function regions() : HasMany { return $this->hasMany(Region::class); } ============================ // Region model public function users() : HasMany { return $this->hasMany(User::class); } public function city() : BelongsTo { return $this->belongsTo(City::class); } ======================== // توی کنترلر به شکل زیر $users = User::where('status', true); if ($request->has('age_difference')) { $users->where('age_difference', '=', $request->age_difference); } if ($request->has('time')) { $users->where('time', '=' , $request->time); } if ($request->has('disability')) { $users->where('disability', '=' , $request->disability); } if ($request->has('name')) { $users->where(function ($query) use ($request) { $query->whereHas('region', function ($query) use ($request) { $query->whereHas('city', function ($query) use ($request) { $query->where('name', 'like', $request->name); }); }); }); }); } dd($users->get()); 1 نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 ممنونم مهندس بازهم تو dd درست نمایش میده ولی وقتی تو compact میزارم کل کاربران سایت رو نمایش میده این تگ فرم و دکمه من مشکلی نداره ؟ <form class="row g-3" action="{{ route('search') }}"> <div class="col-12 text-center mt-5 mb-4"> <button class="btn btn-orange">جستجو</button> </div> </form> نقل قول Share this post Link to post Share on other sites
saber 143 گزارش دادن ارسال شده در بهمن 1 شرطهایی رو که توی جستجو گذاشتید از طریق فرم ارسال نمیکنید؟ توی کنترلر مرحله به مرحله بعد از هر شرط یه dd بگیرید ببینید اشکال کارتون کجا هست اگه شرطها برقرار باشن و روابط رو درست پیاده سازی کنید خروجی میده نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 در 23 دقیقه قبل، saber گفته است : شرطهایی رو که توی جستجو گذاشتید از طریق فرم ارسال نمیکنید؟ توی کنترلر مرحله به مرحله بعد از هر شرط یه dd بگیرید ببینید اشکال کارتون کجا هست اگه شرطها برقرار باشن و روابط رو درست پیاده سازی کنید خروجی میده چرا دقیقا داخل فرم قرارشون دادم همه رو تنها تفاوتی که تو روابط هست این بخش تو مدل user هست public function region() { // return $this->belongsTo(Region::class); return $this->belongsToMany(Region::class); } وقتی belongsTo میزارم ارور میده Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::sync() که من belongsToMany گذاشته بودم کار میکنه دونه به دونه dd میگیرم بعد هر شرط باز هم نمایش میده کاربر مورد نظرو ولی وقتی compact میگیرم کل کاربران نمایش میده ! هوف نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 مشکل از این نیست که نمیگم get کن؟ به این شکل مینویسم درسته؟ return view('profile' , compact(['users' , 'provinces' , 'users_filter'])); نقل قول Share this post Link to post Share on other sites
saber 143 گزارش دادن ارسال شده در بهمن 1 بین شهر و منطقه رابطه چند به چند دارید؟ و بین منطقه و کاربران رابطه یک به چند؟ نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 در 6 ساعت قبل، saber گفته است : بین شهر و منطقه رابطه چند به چند دارید؟ و بین منطقه و کاربران رابطه یک به چند؟ در کل برای پروژم من میخام هر کاربر بتونه بعدا استان و شهر و منطقه خودش رو تغییر بده و هر کاربر بتونه یک یا چند منطقه رو انتخاب کنه این روابط اشتباهه؟ مدل user public function region() { return $this->belongsTo(Region::class); // return $this->belongsToMany(Region::class); } مدل استان public function cities() { return $this->hasMany(City::class); } مدل شهر public function provinces() { return $this->belongsToMany(Province::class); } public function regions() { return $this->hasMany(Region::class); } مدل منطقه public function city() { return $this->belongsTo(City::class); } public function users() { return $this->hasMany(User::class); // return $this->belongsToMany(User::class); } نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 این اشتباهه مهندس؟ نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 موقع dd به بخش رو false میاره Illuminate\Database\Eloquent\Collection {#1528 ▼ // app\Http\Controllers\frontend\SearchController.php:62 #items: array:1 [▶] #escapeWhenCastingToString: false این بخش فالس هست } نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 یه سوال ایا نیازه جدول جدا برای فیلتر ایجاد بشه ؟ من میخام فیلترهایی که برای کاربران قابل نمایش هست از پنل ادمین بشه مدیریتش کنه ( مثلا بتونم سن رو غیرفعال کنم تا فیلتر بر اساس موارد دیگه باشه و سن رو نشون نده موقع فیلتر کردن) نقل قول Share this post Link to post Share on other sites
saber 143 گزارش دادن ارسال شده در بهمن 1 در در ۱۴۰۱/۱۱/۲۵ در 13:37، Paradox گفته است : یه سوال ایا نیازه جدول جدا برای فیلتر ایجاد بشه ؟ من میخام فیلترهایی که برای کاربران قابل نمایش هست از پنل ادمین بشه مدیریتش کنه ( مثلا بتونم سن رو غیرفعال کنم تا فیلتر بر اساس موارد دیگه باشه و سن رو نشون نده موقع فیلتر کردن) برای این موضوع میتونید یه بخش تنظیمات توی پنل ادمین داشته باشید و بخشهایی رو که میخواید قابل فیلتر باشن از اونجا مشخص کنید و هر زمانی خواستید یه بخشی رو فعال یا غیرفعال کنید 1 نقل قول Share this post Link to post Share on other sites
Paradox 3 گزارش دادن ارسال شده در بهمن 1 در در ۱۴۰۱/۱۱/۲۶ در 00:17، Paradox گفته است : موقع dd به بخش رو false میاره Illuminate\Database\Eloquent\Collection {#1528 ▼ // app\Http\Controllers\frontend\SearchController.php:62 #items: array:1 [▶] #escapeWhenCastingToString: false این بخش فالس هست } این بخش وقتی dd میگیرم اطلاعات همون کاربری که میخام نمایش میده ولی یه ارور هم دارم دلیلش چیه ؟ نقل قول Share this post Link to post Share on other sites