1
我需要搜索一堆登錄頁面,並返回結果。目前,我有這樣的代碼:使用字符串和狀態的雄辯搜索
/**
* @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();
}
如果我尋找的東西,它返回我搜索過的內容,如果我用一個狀態篩選它返回的狀態這是罰款。但是,當我過濾和搜索時,它不起作用,只返回最後一個操作。
假設我按活動過濾,它將返回所有活動的着陸頁。如果我然後在這些活動頁面中搜索'示例',它將返回所有'示例',而不僅僅是那些活動的頁面。
我該如何解決這個問題?
This Works。但是,如果我更改過濾器,它不記得實際的搜索,但我會更多地玩弄它。感謝您的幫助。 :) – Albert