سلام وقتتون بخیر
من میخام جستجو رو بر اساس دسته بندی و اسم محصول و قیمت محصول انجام بدم
تو 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();
دقت کنید که باید با توجه به اسم مدل خودتون و سایر شرایطی که تو متدتون دارید پیاده کنید، ولی کانسپت اصلی همینه.
@mehranmarandi90
نه متاسفانه جواب نداد