Мне нужно выполнить поиск по группе целевых страниц и вернуть результаты. В настоящее время у меня есть этот код:Поиск с красноречивым использованием строки и статусов
/**
* @var \Illuminate\Database\Eloquent\Builder
*/
private $query;
/**
* @param string $status
* @param string $search
* @param int $offset
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getLandingPageListing($status = 'all', $search = '', $offset = 0)
{
$this->query = $this->model->newQuery();
$this->setRelationship();
$this->setStatus($status);
$this->setSearch($search);
return $this->getLandingPages();
}
private function setRelationship()
{
$this->query->with('message');
}
/**
* @param string $status
*/
private function setStatus($status)
{
if ($status !== 'all') {
$this->query->where('lp_status', $status);
}
}
/**
* @param string $search
*/
private function setSearch($search)
{
if ($search !== '') {
$this->query->where('lp_title', 'LIKE', '%' . $search . '%');
$this->query->orWhere('lp_description', 'LIKE', '%' . $search . '%');
$this->query->orWhere('lp_domain', 'LIKE', '%' . $search . '%');
$this->query->orWhereHas('message', function ($query) use ($search) {
$query->where('message_subject', 'LIKE', '%' . $search . '%');
});
}
}
/**
* @return \Illuminate\Database\Eloquent\Collection
*/
private function getLandingPages()
{
return $this->query->get();
}
Если я ищу что-то, он возвращает то, что я искал, и если я фильтровать по статусу он возвращает этот статус, который прекрасно. Однако при фильтрации и поиске он не работает и возвращает только последнее действие.
Итак, скажем, я фильтрую активный, он вернет все активные целевые страницы. Если я затем буду искать «Пример» на этих активных страницах, он вернет все «Примеры», а не только те, которые являются активными.
Как бы исправить это?
Это работает. Однако, если я меняю фильтр, он не запоминает фактический поиск, но я буду играть с ним немного больше. Спасибо за помощь. :) – Albert