@NewSantaClaus

Как сделать поиск по таблице с применением CONCAT в Laravel?

У меня есть таблица users с полями full_name, street_id, house_number.
Поле street_id ссылается на таблицу streets

Мне нужно сделать выборку такого типа:
SELECT 
	*
FROM (
	SELECT 
		s.*,
		CONCAT(u.name, '  ', s.house_number) as address
	FROM 
		users u 
	LEFT JOIN streets s ON s.id = u.street_id
) as t
WHERE t.full_name LIKE '%на%'
OR t.address LIKE '%на%'
LIMIT 0, 10


Этот запрос рабочий. Но как сделать такое же, но от eloquent модели User?

Да, бы мог сделать это просто, с помощью DB::table(). Но в таком случае я потеряю связь street с модели User
public function street()
    {
        return $this->belongsTo(Street::class, 'street_id', 'id');
    }


Подскажите, как реализовать поиск совпадений, по полному адресу учитывая номер дома, или по имени
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
1. Этот запрос может быть легче.
SELECT 
    s.*,
    CONCAT(u.name, '  ', s.house_number) as address
  FROM 
    users u 
  LEFT JOIN streets s ON s.id = u.street_id
WHERE u.full_name LIKE '%на%'
OR CONCAT(u.name, '  ', s.house_number) LIKE '%на%'
LIMIT 0, 10


2. В рамках Laravel

public function scopeOfSearch(Builder $query, $search){
     return $query->leftjoin('streets', 'streets.id', '=', 'users.street_id')->where(function($builder) use($search){
              return $query->whereRaw('CONCAT(u.name, '  ', s.house_number) like ?', '%'.$search.'%')->orWhere('users.full_name', 'like', '%'.$search.'%');
     });
}

$users = User::ofSearch($search)->paginate(10);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы