سلام وقتتون بخیر
من میخام جستجو رو بر اساس دسته بندی و اسم محصول و قیمت محصول انجام بدم
تو url نتیجه رو نمایش میده به این شکل
http://localhost:8000/?category=&title=%D9%84%D9%BE+%D8%AA%D8%A7%D9%BE+Lenovo+G580&price=9%2C900%2C000
ولی چیزی پیدا نمیکنه برام
برای ویو همچین فرمی در نظر گرفتم
<form action="{{ url('/') }}" class="form-inline" method="GET">
<label for="category_filter">category</label>
<select name="category" id="category_filter" class="form-control">
<option value="">انتخاب کنید</option>
@foreach($categories as $category)
<option value="">{{ $category->name }}</option>
@endforeach
</select>
<label for="title">title</label>
<input type="text" class="form-control" name="title" id="title" placeholder="عنوان محصول">
<label for="price">price</label>
<input type="text" class="form-control" name="price" id="price" placeholder="قیمت محصول">
<button type="submit" class="btn btn-primary">جستجو</button>
</form>
کنترلر
$products = Product::query();
if($keyword = request('search')) {
$products->whereHas('categories' , 'LIKE' , "%{$keyword}%")->where('title' , 'LIKE' , "%{$keyword}%")->orWhere('price' , 'LIKE' , "%{$keyword}%");
}
if($keyword = request('search')) {
$products->where('title' , 'LIKE' , "%{$keyword}%")->orWhereHas('categories' , function ($query) {
$query->where('???', 'like', "%{$keyword}%");
})->orWhere('price' , 'LIKE' , "%{$keyword}%");
}
جای ؟؟؟ اسم فیلدی از categories رو که میخوایید جستجو کنه رو وارد کنید
ضمنا تو view هم مقداری به option های categories نمیدید
<option value="*************************">{{ $category->name }}</option>
@mehranmarandi90
به این شکل ؟
if($keyword = request('search')) {
$products->where('title' , 'LIKE' , "%{$keyword}%")->orWhereHas('category' , function ($query) {
$query->where('$category->slug', 'like', "%{$keyword}%");
})->orWhere('price' , 'LIKE' , "%{$keyword}%");
}
برای مقدار چی باید قرار بدم برای ویو ؟
این اشتباهه؟
<option value="{{ $category->name }}">{{ $category->name }}</option>
نه اين كد فكر ميكنم بدون خطا اجرا بشه
if($keyword = request('search')) {
$products->where('title' , 'LIKE' , "%{$keyword}%")
->orWhereHas('category' , function ($query) use ($keyword){
$query->where('slug', 'like', "%{$keyword}%");
})
->orWhere('price' , 'LIKE' , "%{$keyword}%");
}
چيزي كه براي option نوشتيد درسته
@mehranmarandi90
ممنونم ازتون جستجو که میزنم کل محصولات رو نمایش میده و فیلتر رو اعمال نمیکنه فقط تو url نمایش میده
localhost:8000/?category=لوازم+جانبی+موبایل&title=گارد+3Dدياموند+الماسى&price=26%2C000
dd که میگیرم به این صورت هست
سلام به شما دوست عزیز.
این جستجو چه زمانی میخواین اتفاق بیوفته؟
زمانی که اطلاعات محصول رو ثبت کردین، میخواین بین موارد موجود جستجو کنید یا اینکه قبل از ثبت محصول به عنوان مثلا میخواین بین دسته بندی ها، دسته بندی موردنظر رو جستجو کنید و دسته بندی رو انتخاب کنید و ادامه عملیات؟
سلام میخام زمانی که اطلاعات محصول همه ثبت شدن کاربران سایت بتونن با انتخاب این ۳ فیلتر محصول خودشون رو جستجو کنن
کوئری شما باید به صورت زیر باشه.
$products = Product::query();
if($keyword = request('search')) {
$products->where('title' , 'LIKE' , "%{$keyword}%")->orWhere('price' , 'LIKE' , "%{$keyword}%")
->orWhereHas('category' , function ($query) use ($keyword){
$query->where('slug', 'LIKE', "%{$keyword}%");
});
}
@rezajahangir
ممنونم اصلا فیلتر کار نمیکنه تمام محصولات نمایش میده
فرم من درسته ؟
<form action="{{ url('/') }}" class="form-inline" method="GET">
<label for="category_filter">category</label>
<select name="category" id="category_filter" class="form-control">
<option value="">انتخاب کنید</option>
@foreach($categories as $category)
<option value="{{ $category->name }}">{{ $category->name }}</option>
@endforeach
</select>
<label for="title">title</label>
<input type="text" class="form-control" name="title" id="title" placeholder="عنوان محصول">
<label for="price">price</label>
<input type="text" class="form-control" name="price" id="price" placeholder="قیمت محصول">
<button type="submit" class="btn btn-primary">جستجو</button>
</form>
شما تو فرمتون مقادیر category , title price رو ارسال میکنید و چیزی که تو کد مشخصه مقدار keyword رو در کوئری استفاده میکنید که متوجه نشدم از کجا اومد
اگر مقادیر اینها باشه شاید میتونید یه همچین کدی بنویسید
$product_query = product::query();
if (isset($request->title)){
$product_query->where('title' , 'LIKE' , "%{$request->title}%");
}
if (isset($request->price)) {
$product_query->where('price' , 'LIKE' , "%{$request->price}%");
}
if (isset($request->category)) {
$product_query->WhereHas('category' , function ($query) use ($request){
$query->where('slug', 'like', "%{$request->category}%");
});
}
$product = $product_query->get();
دقت کنید که باید با توجه به اسم مدل خودتون و سایر شرایطی که تو متدتون دارید پیاده کنید، ولی کانسپت اصلی همینه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟