criar uma consulta com condicional cláusula where na eloqüente modelo
Pergunta
Eu preciso para construir uma consulta com eloqüente modelo incluindo condicional cláusula where.Eu criei algo de pesquisa google.Mas ele não parece estar funcionando.
if ($status) {
$this->where('status', $status);
}
if ($assignedto) {
$this->where('assigned_to', $assignedto);
}
if ($fromDate != null && $toDate != null) {
$this->whereBetween('date', array($fromDate, $toDate));
}
$quotes = $this->orderBy('date', 'desc')->paginate(40);
Este retorna todos os resultados sem a filtragem do estado, atribuídos a e datas.
Solução
Eu atualizei ele atribuindo $this
uma nova variável, porque quando eu atribuído a consulta para $this
, ele é mostrado um erro, $this
não pode ser escrito.
$quoteModel = $this;
if ($status) {
$quoteModel = $quoteModel->where('status', $status);
}
if ($assignedto) {
$quoteModel = $quoteModel->where('assigned_to', $assignedto);
}
if ($fromDate != null && $toDate != null) {
$quoteModel = $quoteModel->whereBetween('date', array($fromDate, $toDate));
}
$quotes = $quoteModel->orderBy('date', 'desc')->paginate(40);
que funciona perfeitamente agora.Mas se alguém tem alguma melhor opção, por favor, sugira.Obrigado.
Outras dicas
Eu adicionei um escopo para o meu modelo e chamá-lo a partir do controlador.Desta forma, o real filtragem trabalho é feito no modelo, o controlador está apenas executando a consulta através do escopo de filtro.
Modelo:
Eu sou a obtenção de parâmetros de URL com Input::get
, mas você também passá-los como parâmetros de entrada para a função.
public function scopeFilter($query)
{
$published = Input::get('published');
if (isset($published)) $query->where('published', '=', $published);
return $query;
}
Controlador:
Aqui a consulta é executada através da filter()
antes de retornar para a view.
public function index()
{
return View::make('articles.index', [
'articles' => Article::with('writer')->filter()->get()
]);
}