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.

Foi útil?

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()
    ]);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top