Mohammad Abdollahi
3 سال پیش توسط Mohammad Abdollahi مطرح شد
5 پاسخ

کوئری برای جستجو در دو جدول مختلف

سلام دوستان :

من دو تا جدول مختلف دارم که میخوام وقتی کاربر در فرم سرچ چیزی را جستجو کرد از هر دو جدول اطلاعات رو نشان بدهم :

این دو تا جدول رو اینجوری نوشتم :

 $q = trim($request->search);
        $user = DB::table('dedicateds')
            ->Where('keywords', 'LIKE', '%' . $q . '%')
            ->orWhere('company_name', 'LIKE', '%' . $q . '%')
            ->orWhere('ostan', 'LIKE', '%' . $q . '%')
            ->paginate(15);

        $normal = DB::table('normalkars')
            ->Where('keywords', 'LIKE', '%' . $q . '%')
            ->orWhere('name', 'LIKE', '%' . $q . '%')
            ->orWhere('ostan', 'LIKE', '%' . $q . '%')
            ->paginate(15);

چطوری میتونم این موضوع رو پیاده سازی کنم ؟


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

نه شرط نمیخواد در هرصورت شما بدون شرط نتایج هر چی باشه رو به ویوی سرچت بفرست اونجا متغیرهارو تست کن اگه مقدار داشتن نشونشون بده و اگه خالی بودن پیامی به کاربر مبنی بر اینکه رکوردی یافت نشد نمایش بده.
اونجا باید دقت کنی در ویوی سرچت بهتره یه پیام در صورت پیدا نشدن رکوردی در هر دو جدول نشون بدی.

@if ($user->count() == 0 && $normal->count() == 0)
    داده ای یافت نشد
@else
    @foreach($user as $u)
        show all users
    @endforeach
    @foreach($normal as $n)
        show all normal
    @endforeach
@endif

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

اینطور شرط ها رو باید اینطوری بنویسی

        $q = trim($request->search);
        $user = DB::table('dedicateds')
           ->Where('keywords', 'LIKE', '%' . $q . '%')
           ->orWhere(function($query)use($q) {
               $query->where('company_name', 'LIKE', '%' . $q . '%')
                ->orWhere('ostan', 'LIKE', '%' . $q . '%');
           })->paginate(15);

راهنما


Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش مطرح شد
0

درود
خب در این کدی که نوشتید جدول normalkars وجود نداره !

@hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش آپدیت شد
0

ببین منظور شما اگه این باشه که نتایج جستجو دو جدولو درقالب یه متغییر داشته باشی ایتدا برای هر جدول تنها کوئری بکش بعد دو تا متغییرتو با هم union کن اینطوری دو متغییر تبدیل به یه متغییر میشه البته در این جا نکته ای هست و این که تمام ستون های دو جدول باید مثل هم باشه. دنبال متد uninon در کالکشن های لاراول باش و یادش بگیر. سادست
یا میتونی به همین روش خودت عمل کنی بعد هنگام نمایش از دو تا foreach پشت سرم هم برای نمایش هر کدوم استفاده کنی.
روش استفاده از union تو این لینک هست


Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش مطرح شد
0

درود
بله به نظرم روشی ک خودم استفاده کردم بهتر هست فقط یک سوال اینجا پیش میاد :

 $q = trim($request->search);
        $user = DB::table('dedicateds')
            ->Where('keywords', 'LIKE', '%' . $q . '%')
            ->orWhere('company_name', 'LIKE', '%' . $q . '%')
            ->orWhere('ostan', 'LIKE', '%' . $q . '%')
            ->paginate(15);

        $normal = DB::table('normalkars')
            ->Where('keywords', 'LIKE', '%' . $q . '%')
            ->orWhere('name', 'LIKE', '%' . $q . '%')
            ->orWhere('ostan', 'LIKE', '%' . $q . '%')
            ->paginate(15);

 if (count($user) > 0)
            return view('user.searched', compact('user','normal', 'q'));
        else  return abort(404);

چطوری با یه شرط کاربر رو به view جستجو بفرستم ؟
مثلا وقتی که متغییر user نتیجه ای در برنداشته باشد نباید ارسال بشه
وقتی هم متغییر normal نتیجه ای در برنداشته باشد نباید ارسال بشه

ببینید می تونیم یکاری کنیم 3 تا view برای جستجو داشته باشیم
ویو اول : اگر count(user) بزرگتر از 0 باشه و count(normal) مساوی صفر باشه
ویو دوم : اگر هم user و هم normal بزرگتر از 0 باشن
ویو سوم : اگر count(user) مساوی صفر باشه و Count(normal) بزرگتر از صفر باشه

نظر شما چیست ؟
@hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
2

نه شرط نمیخواد در هرصورت شما بدون شرط نتایج هر چی باشه رو به ویوی سرچت بفرست اونجا متغیرهارو تست کن اگه مقدار داشتن نشونشون بده و اگه خالی بودن پیامی به کاربر مبنی بر اینکه رکوردی یافت نشد نمایش بده.
اونجا باید دقت کنی در ویوی سرچت بهتره یه پیام در صورت پیدا نشدن رکوردی در هر دو جدول نشون بدی.

@if ($user->count() == 0 && $normal->count() == 0)
    داده ای یافت نشد
@else
    @foreach($user as $u)
        show all users
    @endforeach
    @foreach($normal as $n)
        show all normal
    @endforeach
@endif

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

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