@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' => 'نتیجه ای یافت نشد']);
}
دوست عزیز گزینهها چطوری هستن؟ میخوایین چی رو دقیقا سرچ کنید؟ چی دو کلمهای باشه؟
اگه میخوایین جستجو بین عبارت باشه (نه کل عبارت) از 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 .'%');
}
}
@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'=>"نتیجه ای یافت نشد"]);
}
@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' => 'نتیجه ای یافت نشد']);
}
چیزهایی که تغییر کردن رو خوب دقت کنین.
عیب برنامه شما اینکه با آدی داره به صورت like سرچ میزنه برای آدی این کارو نکنید
و اشتباه دوم اینکه مقدار آدی رو داره در ستون title جدول میگرده
برای مقایسه تاریخ ابتدا مقدار تایم استمپ رو تبدیل به فرمت تاریخ در جدول نمایید بعد عمل مقایسه رو انجام بدید.
فرمت دوتا رو یکی نمایید
@juza66
@mohaligateway
@ali.bayat
@mohaligateway
@Rp76
فقط اگه میشه بگید چطوری این خط کد که تکرار شده رو بهینه کنم
return response()->json(['message'=>"نتیجه ای یافت نشد"]);
بفرمایید
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' => 'نتیجه ای یافت نشد']);
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟