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);
}
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étodowith
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.