@mohaligateway
@muhammad
@ali.bayat
سرچ چند گزینه ای به چه شکل میشه؟
مثلا میخوام بر اساس عنوان و تاریخ و تعداد بره جستجو کنه و تاریخش به صورت تایم استمپ هست
بفرمایید
public function searchHome($id, $date, $number)
{
$services = Service::where('title', 'like', "%{$id}%")
->orderBy('id', 'desc')
->published()
->get();
if ( $services->isNotEmpty() ) {
$products = Product::whereIn('service_id', $services->pluck('id'))->get();
if ( $products->isNotEmpty() ) {
$sans = Sans::whereIn('product_id', $products->pluck('id'))
->where([ ['date', '>=', $date], ['capacity', '>=', $number] ])
->get();
if ($sans->isNotEmpty()) {
return response()->json(['data' => $sans]);
}
}
}
return response()->json(['message' => 'نتیجه ای یافت نشد']);
}https://laravel.com/docs/8.x/queries
مثال: where, orWhere
شاید پاسخ شما همینجا باشد
@juza66
@muhammad
@mohaligateway
اگر دو کلمه ای باشه به مشکل میخورم
دوست عزیز گزینهها چطوری هستن؟ میخوایین چی رو دقیقا سرچ کنید؟ چی دو کلمهای باشه؟
اگه میخوایین جستجو بین عبارت باشه (نه کل عبارت) از LIKE استفاده کنین:
->where('title', 'like', '%na%')
اینطوری هم Banana رو قبول میکنه، هم Manager و ...
سلام و درود
شما فرض کنید که یک Model به نام article دارید. داخل article می تونید با استفاده از scope ها به شکل زیر جست و جو رو انجام بدید.
public function scopeSearch($query, $keywords)
{
$keywords = explode(' ', $keywords);
foreach($keywords as $keyword) {
$query->whereHas('categories', function ($query) use ($keyword) {
$query->where('title', 'LIKE', '%'. $keyword .'%');
})
->orWhere('title', 'LIKE', '%' . $keyword .'%')
->orWhere('tag', 'LIKE', '%'. $keyword .'%');
}
}
اگه بتونید از livewire استفاده بکنید خیلی کار تمیز و خوبی در میاد.
@ftp
@juza66
@muhammad
@mohaligateway
@ali.bayat
من خودم به این شکل نوشتم سه تا ورودی داریم عنوان وتایم و تعداد که بر اساس اینها میره جستجو میکنه .اگه کد بهینه نیست یا مشکلی داره میشه بگید؟
public function searchhome($id,$date,$number)
{
$search_id = '%' . $id . '%';
$service = Service::where('title', 'like', $search_id)->orderby('id','desc')->publish()->get();
if(!$service->isEmpty()){
// $count = $service->count();
$ids = $service->pluck('id')->toArray();
$product=Product::wherein('service_id',$ids)->get();
if(!$product->isEmpty()){
$id_pro = $product->pluck('id')->toArray();
$sans=Sans::wherein('product_id',$id_pro)->where([['date','>=',$date],['capacity','>=',$number]])->get();
if(!$sans->isEmpty()){
return response()->json(['data'=>$sans]);
}else{
return response()->json(['message'=>"نتیجه ای یافت نشد"]);
}
}else{
return response()->json(['message'=>"نتیجه ای یافت نشد"]);
}
}else{
return response()->json(['message'=>"نتیجه ای یافت نشد"]);
}قطعا جای ریفکتورکردن داره. @ftp
@muhammad
پیشنهادتون چیه؟
الان چطوری این رو که سه بار تکرار شده ریفکتور کنم
return response()->json(['message'=>"نتیجه ای یافت نشد"]);میشه else هارو برداشت چون وقتی return اجرا بشه، مقدار برمیگرده به اونجا که این متد اجرا شده و دیگه ادامه کدها اجرا نمیشه. اینجوری یه کم کدها تمیزتر میشن.
به جای استفاده از نقیض isEmpty میشه یه راست از isNotEmpty استفاده کرد که خواناتره.
قطعا میشه تمیزترش هم کرد ولی چون الآن خستم و مغزم نمیکشه نمیتونم روی منطق کداتون تمرکز کنم و بگم چهطور سادهترش کنیم. 😁🌹
<?php
public function searchhome($id, $date, $number) // Use spaces!
{
$services = Service::where('title', 'like', "%{$id}%") // Plural: services
->orderby('id','desc') // Use newline to have tidy code
->published() // Rename the scope's name
->get();
if ($services->isNotEmpty()) {
$products = Product::whereIn('service_id', $services->pluck('id'))->get();
if ($products->isNotEmpty()) {
$sans = Sans::whereIn('product_id', $products->pluck('id'))
->where([['date', '>=', $date], ['capacity', '>=', $number]])
->get();
if ($sans->isEmpty()) {
return response()->json(['message'=> 'نتیجه ای یافت نشد']);
}
return response()->json(['data' => $sans]);
}
return response()->json(['message' => 'نتیجه ای یافت نشد']);
}
return response()->json(['message' => 'نتیجه ای یافت نشد']);
}
چیزهایی که تغییر کردن رو خوب دقت کنین.
@juza66
@mohaligateway
@ali.bayat
@mohaligateway
@Rp76
فقط اگه میشه بگید چطوری این خط کد که تکرار شده رو بهینه کنم
return response()->json(['message'=>"نتیجه ای یافت نشد"]);