Pergunta

Nas minhas coleções do Eloquent, gostaria de adicionar uma coluna extra chamada "editável"."Editável" deve ser incluído em cada consulta que executo em alguns modelos."Editável" mostra ser verdadeiro ou falso, com base em uma consulta bruta.

Portanto, tenho uma consulta que deve ser executada em cada consulta nos meus modelos.Adicionando uma coluna extra à minha coleção.O valor de "editável" é determinado por uma consulta bruta.

Qual é a melhor maneira de fazer isso?

Foi útil?

Solução

Você poderia adicionar um addSelect() método à sua cadeia de consulta para incluir o atributo personalizado.

Algo como

$results = YourModelClass::select("*")
    ->addSelect(DB::raw("IF(condition,1,0) AS editable"))
    ->get();

No caso acima, você substituiria condition com sua instrução SQL relevante que seria avaliada por linha como parte da consulta.Se a afirmação for verdadeira, então editable = 1 e se for falso então editable = 0 para cada linha retornada à sua coleção.

EDITAR:Acabei de ver que você quer isso todo consulta, então você provavelmente precisaria de um escopo/característica global para seus modelos, mas a técnica acima para incluir o atributo extra deve ser a correta.

Não copiarei/colarei a documentação sobre como adicionar escopos globais, que está na documentação principal do Laravel e tenho certeza que você pode encontrá-la.

Outras dicas

Você pode adicionar um getter personalizado ao seu modelo:

public function getEditableAttribute()
{
    /* return result from your raw query here */;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top