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

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

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


ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
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' => 'نتیجه ای یافت نشد']);
}

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

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


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

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


Muhammad
تخصص : Back-End Developer
@muhammad 4 سال پیش آپدیت شد
0

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

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

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


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 4 سال پیش مطرح شد
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
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 4 سال پیش مطرح شد
0

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


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

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


ftp
تخصص : ساده
@ftp 4 سال پیش آپدیت شد
0

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

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

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

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

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

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


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

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


ftp
تخصص : ساده
@ftp 4 سال پیش آپدیت شد
0

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

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

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
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' => 'نتیجه ای یافت نشد']);
}

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

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