سلام دوستان.
من دو تا جدول دارم، یکی users و دیگری profiles.
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('role')->default('user');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('CASCADE');
$table->string('firstName');
$table->string('lastName');
$table->string('phone');
$table->timestamps();
});
حالا میخوام وقتی نام و نام خانوادگی کاربر رو جستجو میکنم نتیجه درست رو نمایش بده ولی چیزی نمایش نمیده، در صورتی که اگه نام یا نام خانوادگی رو جدا وارد کنه نتیجه درست رو نمایش میده.
کنترلر مربوطه به صورت زیر است:
public function users() {
$users = User::query();
if ($keyword = request('search')) {
$users->where('email', 'LIKE', "%{$keyword}%")->orWhereHas('profile', function ($query) use ($keyword) {
$query->where('firstName', 'LIKE', "%{$keyword}%")->orWhere('lastName', 'LIKE', "%{$keyword}%")->orWhere('phone', 'LIKE', "%{$keyword}%");
});
}
$users = $users->latest()->paginate(10);
return view('panel.users.index', compact('users'));
}
همچنین به صورت زیر هم نوشتم ولی مجدد هیچی نمایش نمیده.
$query->where('firstName', 'LIKE', "%{$keyword}%")->where('lastName', 'LIKE', "%{$keyword}%")->orWhere('phone', 'LIKE', "%{$keyword}%");
سلام به شما دوست عزیز.
نکته ای که باید به آن توجه کنید این است که دو فیلد firstName و lastName باید به عنوان یک فیلد شناخته بشن تا بتونید با سرچ اسم و فامیل نتیجه درست رو برگردونید. برای انجام اینکار میتونید از عمل concat کردن استفاده کنید که کد شما به صورت زیر باید نوشته بشه.
public function users() {
$users = User::query();
if ($keyword = request('search')) {
$users->where('email', 'LIKE', "%{$keyword}%")->orWhereHas('profile', function ($query) use ($keyword) {
$query->where(DB::raw('concat(firstName," ",lastName)') , 'LIKE' , "%{$keyword}%")->orWhere('phone', 'LIKE', "%{$keyword}%");
});
}
$users = $users->latest()->paginate(10);
return view('panel.users.index', compact('users'));
}
در واقع کوئری شما باید به صورت زیر نوشته بشه.
$query->where(DB::raw('concat(firstName," ",lastName)') , 'LIKE' , "%{$keyword}%")->orWhere('phone', 'LIKE', "%{$keyword}%");
موفق باشید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟