راکت
حل شده

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

14 پاسخ

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

ftp
ftp
@ftp
ثبت پرسش جدید

پاسخ‌ها

14
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

بهترین پاسخ

بفرمایید

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

تخصص: سی شارپ و پی اچ پی

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

Muhammad
Muhammad
@muhammad

تخصص: Back-End Developer

شاید پاسخ شما همین‌جا باشد

ftp
ftp
@ftp

تخصص: ساده

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

Muhammad
Muhammad
@muhammad

تخصص: Back-End Developer

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

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

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

moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

سلام و درود
شما فرض کنید که یک 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
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

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

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

تخصص: Back-End Developer

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

ftp
ftp
@ftp

تخصص: ساده

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

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

تخصص: Back-End Developer

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

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

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

Muhammad
Muhammad
@muhammad

تخصص: Back-End Developer

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

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

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

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

ftp
ftp
@ftp

تخصص: ساده

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

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

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

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