Necesito tu ayuda.
Tengo los siguientes modelos:
class Store extends Model { public function categories() { return $this->belongsToMany(Category::class,'category_by_store','store_id','category_id')->withPivot('refIdInMyStore'); } } class Category extends Model{ public function store() { return $this->belongsToMany(Store::class, 'category_by_store','category_id','store_id'); }}
Entonces, si quiero recuperar categorías de una tienda, escribo:
$store = Store::find(1); $categories = $store->categories()
Pero la respuesta es: {"withTimestamps":false}
¿Cuál es mi error?
¡Gracias!
Es porque lo está llamando como una función $store->categories()
. Lo cual sería similar a llamar a Categories::where('store_id', $id)
sin llamar a ->get()
para ejecutar la consulta.
Debería llamarlo como un atributo $categories = $store->categories
en su lugar.
Hay muchos que están en contra de no ser explícitos sobre el hecho de que estás ejecutando una nueva consulta porque la relación parece un atributo.
Descubrí que es mejor para la claridad del código y el rendimiento probable usar la carga ansiosa de esta manera:
$store = Store::with('categories')->find(1);
Creo que esto indica claramente que utilizará la relación de categorías.