راکت
ftp
ftp
توسط ftp مطرح شد
حل
14 پاسخ

سرچ چند گزینه ای

@mohaligateway
@muhammad
@ali.bayat
سرچ چند گزینه ای به چه شکل میشه؟
مثلا میخوام بر اساس عنوان و تاریخ و تعداد بره جستجو کنه و تاریخش به صورت تایم استمپ هست


ثبت پرسش جدید
حسین شیری نژاد
حسین شیری نژاد
تخصص :programmer
@hosseinshirinegad985 سال پیشمطرح شد
0

بفرمایید

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' => 'نتیجه ای یافت نشد']);
}

سیدعلی موسوی
سیدعلی موسوی
تخصص :سی شارپ و پی اچ پی
@juza665 سال پیشمطرح شد
0

با همون where دیگه! برای تاریخ هم شمسی بگیر و کانورت کن قبل از سرچ


Muhammad
Muhammad
تخصص :Back-End Developer
@muhammad5 سال پیشمطرح شد
ftp
ftp
تخصص :ساده
@ftp5 سال پیشمطرح شد
0

@juza66
@muhammad
@mohaligateway
اگر دو کلمه ای باشه به مشکل میخورم


Muhammad
Muhammad
تخصص :Back-End Developer
@muhammad5 سال پیشمطرح شد
0

دوست عزیز گزینه‌ها چطوری هستن؟ می‌خوایین چی رو دقیقا سرچ کنید؟ چی دو کلمه‌ای باشه؟
اگه می‌خوایین جستجو بین عبارت باشه (نه کل عبارت) از LIKE استفاده کنین:

->where('title', 'like', '%na%')

اینطوری هم Banana رو قبول می‌کنه، هم Manager و ...


moha li
moha li
تخصص :توسعه دهنده لاراول و Vue
@mohaligateway5 سال پیشمطرح شد
0

سلام و درود
شما فرض کنید که یک 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 .'%');
        }
    }

@ftp


moha li
moha li
تخصص :توسعه دهنده لاراول و Vue
@mohaligateway5 سال پیشمطرح شد
0

اگه بتونید از livewire استفاده بکنید خیلی کار تمیز و خوبی در میاد.
@ftp


ftp
ftp
تخصص :ساده
@ftp5 سال پیشمطرح شد
0

@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
Muhammad
تخصص :Back-End Developer
@muhammad5 سال پیشمطرح شد
0

قطعا جای ریفکتورکردن داره. @ftp


ftp
ftp
تخصص :ساده
@ftp5 سال پیشمطرح شد
0

@muhammad
پیشنهادتون چیه؟
الان چطوری این رو که سه بار تکرار شده ریفکتور کنم

return response()->json(['message'=>"نتیجه ای یافت نشد"]);

Muhammad
Muhammad
تخصص :Back-End Developer
@muhammad5 سال پیشمطرح شد
0

میشه else هارو برداشت چون وقتی return اجرا بشه، مقدار برمی‌گرده به اونجا که این متد اجرا شده و دیگه ادامه کدها اجرا نمیشه. اینجوری یه کم کدها تمیزتر میشن.

به جای استفاده از نقیض isEmpty میشه یه راست از isNotEmpty استفاده کرد که خواناتره.

قطعا میشه تمیزترش هم کرد ولی چون الآن خستم و مغزم نمی‌کشه نمی‌تونم روی منطق کداتون تمرکز کنم و بگم چه‌طور ساده‌ترش کنیم. 😁🌹


Muhammad
Muhammad
تخصص :Back-End Developer
@muhammad5 سال پیشمطرح شد
0
<?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' => 'نتیجه ای یافت نشد']);
}

چیزهایی که تغییر کردن رو خوب دقت کنین.


حسین شیری نژاد
حسین شیری نژاد
تخصص :programmer
@hosseinshirinegad985 سال پیشمطرح شد
0

عیب برنامه شما اینکه با آدی داره به صورت like سرچ میزنه برای آدی این کارو نکنید
و اشتباه دوم اینکه مقدار آدی رو داره در ستون title جدول میگرده
برای مقایسه تاریخ ابتدا مقدار تایم استمپ رو تبدیل به فرمت تاریخ در جدول نمایید بعد عمل مقایسه رو انجام بدید.
فرمت دوتا رو یکی نمایید


ftp
ftp
تخصص :ساده
@ftp5 سال پیشمطرح شد
0

@juza66
@mohaligateway
@ali.bayat
@mohaligateway
@Rp76
فقط اگه میشه بگید چطوری این خط کد که تکرار شده رو بهینه کنم

        return response()->json(['message'=>"نتیجه ای یافت نشد"]);

حسین شیری نژاد
حسین شیری نژاد
تخصص :programmer
@hosseinshirinegad985 سال پیشمطرح شد
0

بفرمایید

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' => 'نتیجه ای یافت نشد']);
}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام