es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Laravel con() carga ansiosa devuelve datos vacíos.

Tengo una relación uno a muchos en mi modelo. Básicamente una “Categoría” y un “Producto”. Un producto solo puede tener una categoría, pero una categoría puede tener muchos productos. El código siguiente funciona:

return Category::select('id', 'name')->whereIn('id', $categories)->with('products')->get();

Devuelve una clave de producto y dentro de esta las columnas del producto en la base de datos, pero cuando uso eager loading solo devuelve un conjunto vacío:

return Category::select('id', 'name')->whereIn('id', $categories)->with(['products' => function($query){
            $query->limit(5);
        }])->get();

También he intentado agregar la palabra clave “return” así: return $query->limit(5);, pero aún no tengo suerte.

También he intentado especificar las columnas de esta manera:

return Category::select('id', 'name')->whereIn('id', $categories)->with('products:id,name')->get();

Pero aún así devuelve un conjunto de datos vacío.

Como estoy construyendo una API, esto es cómo se ve los datos JSON:

[
     {
        "id": 161,
        "name": "Salud y cuidado personal",
        "products": []
    },
    {
        "id": 256,
        "name": "Maquillaje y fragancias",
        "products": []
    }
]

Mi estructura de tabla es la siguiente:

Tabla “categories” (no hay columna “product_id”, ya que es una relación uno a muchos)

+----+--------------+
| id | nombre       |
+----+--------------+
|    |              |
+----+--------------+
|    |              |
+----+--------------+
|    |              |
+----+--------------+

Tabla “producto”

+----+--------------+-------+-------------+
| id | nombre       | precio| category_id |
+----+--------------+-------+-------------+
|    |              |       |             |
+----+--------------+-------+-------------+
|    |              |       |             |
+----+--------------+-------+-------------+
|    |              |       |             |
+----+--------------+-------+-------------+

Mi modelo de category se declara así:

public function products()
{
    return $this->hasMany(Product::class);
}

y el modelo de product es:

public function category()
{
    return $this->belongsTo(Category::class);
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Basándonos en los fragmentos de código proporcionados y en la estructura de la tabla, es posible que el problema resida en la variable $categories que se pasa a la consulta. Asegúrate de que no esté vacía y sea un array de IDs de categoría válidos.

    Si el problema persiste, intenta eliminar el filtro whereIn('id', $categories) y verifica si devuelve algún dato. Si lo hace, entonces el problema puede estar en el filtro.

    Además, prueba a eliminar el alcance de consulta limit(5) del método with y verifica si devuelve algún dato.

    Finalmente, asegúrate de que haya productos asociados a las categorías en la base de datos. El conjunto de datos vacío en la salida JSON indica que no hay productos relacionados dentro del límite especificado.

Comments are closed.