Agregue una fila a Eloquent Collection de forma predeterminada según la consulta sin formato

StackOverflow https://stackoverflow.com//questions/25010933

  •  20-12-2019
  •  | 
  •  

Pregunta

En mis colecciones de Eloquent, me gustaría agregar una columna adicional llamada "editable"."Editable" debería incluirse en cada consulta que ejecuto en algunos modelos.La muestra "Editable" puede ser verdadera o falsa, según una consulta sin formato.

Entonces tengo una consulta que debería ejecutarse en cada consulta de mis modelos.Añadiendo una columna extra a mi colección.El valor de "editable" está determinado por una consulta sin formato.

¿Cuál es la mejor manera de hacer esto?

¿Fue útil?

Solución

Podrías agregar un addSelect() método a su cadena de consulta para incluir el atributo personalizado.

Algo como

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

En el caso anterior, reemplazaría condition con su declaración SQL relevante que se evaluaría por fila como parte de la consulta.Si la afirmación es verdadera, entonces editable = 1 y si es falso entonces editable = 0 por cada fila devuelta a su colección.

EDITAR:Acabo de ver que quieres esto cada consulta, por lo que probablemente necesitará un alcance/rasgo global para sus modelos, pero la técnica anterior para incluir el atributo adicional debería ser la correcta.

No copiaré ni pegaré la documentación sobre cómo agregar alcances globales, está en los documentos principales de Laravel y estoy seguro de que puede encontrarla.

Otros consejos

Puede agregar un Getter personalizado a su modelo:

public function getEditableAttribute()
{
    /* return result from your raw query here */;
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top