سلام دوستان :
من دو تا جدول مختلف دارم که میخوام وقتی کاربر در فرم سرچ چیزی را جستجو کرد از هر دو جدول اطلاعات رو نشان بدهم :
این دو تا جدول رو اینجوری نوشتم :
$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 ($user->count() == 0 && $normal->count() == 0)
داده ای یافت نشد
@else
@foreach($user as $u)
show all users
@endforeach
@foreach($normal as $n)
show all normal
@endforeach
@endif
اینطور شرط ها رو باید اینطوری بنویسی
$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);
ببین منظور شما اگه این باشه که نتایج جستجو دو جدولو درقالب یه متغییر داشته باشی ایتدا برای هر جدول تنها کوئری بکش بعد دو تا متغییرتو با هم union کن اینطوری دو متغییر تبدیل به یه متغییر میشه البته در این جا نکته ای هست و این که تمام ستون های دو جدول باید مثل هم باشه. دنبال متد uninon در کالکشن های لاراول باش و یادش بگیر. سادست
یا میتونی به همین روش خودت عمل کنی بعد هنگام نمایش از دو تا foreach پشت سرم هم برای نمایش هر کدوم استفاده کنی.
روش استفاده از union تو این لینک هست
درود
بله به نظرم روشی ک خودم استفاده کردم بهتر هست فقط یک سوال اینجا پیش میاد :
$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
نه شرط نمیخواد در هرصورت شما بدون شرط نتایج هر چی باشه رو به ویوی سرچت بفرست اونجا متغیرهارو تست کن اگه مقدار داشتن نشونشون بده و اگه خالی بودن پیامی به کاربر مبنی بر اینکه رکوردی یافت نشد نمایش بده.
اونجا باید دقت کنی در ویوی سرچت بهتره یه پیام در صورت پیدا نشدن رکوردی در هر دو جدول نشون بدی.
@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
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟