Agregue algunos registros a todos los resultados de la consulta elocuente.
Tengo una tabla llamada food_portion como la siguiente:
id|food_id|name|gram_weight
1|102030|rebanada|183
2|102030|tarta|183
3|102031|gofre|35
….
La tabla está completa, pero faltan algunas porciones globales como gramo/onzas…
Quería escribir una consulta para agregar registros para estas porciones, pero estoy pensando que no es una buena opción porque estas porciones tienen el mismo valor para todos los alimentos.
||gr|1 (6000 registros como este)
||oz|28 (y otros 6000 como este)
Entonces estoy buscando una forma de modificar mi modelo (food_portion) para que cada vez que ejecuto una consulta utilizando el modelo, obtenga los registros anteriores sin tenerlos físicamente en la tabla de la base de datos. De esta manera, mis consultas no serían lentas sin motivo.
¿Cómo puedo hacer esto? Intenté hacerlo utilizando el ámbito global pero fallé:
protected static function booted()
{
static::addGlobalScope(‘global_portions’, function (Builder $builder) {
$builder->orWhere(function ($query)
{
//$query->where(“food_id”,”*”)->where(“name”,”gr”) ???
// ¿Qué debo escribir aquí?
});
});
}
En resumen, quiero evitar la repetición de registros para cada alimento.
Quiero agregar dos registros específicos a cada resultado de consulta.
Gracias de antemano
davy.ai
Para lograr esto, puedes agregar los dos registros específicos como atributos virtuales a tu modelo FoodPortion. Los atributos virtuales son atributos que no existen en la tabla de la base de datos, pero son generados dinámicamente por la instancia del modelo.
Aquí tienes un ejemplo de implementación:
La propiedad
protected $appends
debe contener los nombres de los atributos virtuales que deseas agregar. En este caso,gr_portion
yoz_portion
.Los métodos
getGrPortionAttribute
ygetOzPortionAttribute
son métodos de acceso que devuelven los valores de los atributos virtuales.Los atributos virtuales
gr_portion
yoz_portion
se incluirán en los resultados de la consulta para cada instancia deFoodPortion
.Nota: También puedes utilizar los métodos de acceso para modificar atributos existentes, por ejemplo, para convertir pesos de gramos a onzas.