Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/07/2018, 23:51
Avatar de ArturoGallegos
ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Laravel error if en relationship

El dia de hoy me he topado con un error algo curioso que no he savido solventar directamente con eloquent.,



Verán tengo la siguiente función para obtener los detalles de un inventario y sus ventas filtrado o no por vendedor
Relacion en inventario:
Código PHP:
Ver original
  1. public function Ventas(){
  2.         return $this->hasMany('App\Ventas', 'inventario_id');
  3.     }
Funcion en controlador

Código PHP:
Ver original
  1. public function detalle_evento($inventario_id, $vendedor = false){
  2.     $inventario = Inventario::where('id', $inventario_id);
  3.     if($vendedor){
  4.         $inventario = $inventario->with(['Ventas' => function($query) use($vendedor){
  5.             $query->where('vendedor', $vendedor);
  6.         }]);
  7.     }else{
  8.         $inventario = $inventario->with('Ventas');
  9.     }
  10.     return $inventario->first();
  11. }


Hasta aqui todo Ok, mando llamar la funcion dentro de otra funcion que genera la vista y hago un return en ese momento para verificar los datos, me las ventas filtradas por ID de vendedor en json dado que no he imprimido la vista.... Magnifico

Código PHP:
Ver original
  1. return $evento = $this->detalle_evento($inventario_id, $request->vendedor);


Pero requiero hacer un par de operaciones extra
Código PHP:
Ver original
  1. foreach ($evento->ventas as $venta) {
  2. //.... aqui mis operaciones
  3. }
  4. return $evento;




Aquí es donde me quedo de 6.... me retorna todas las ventas sin filtrar, a lo que me pregunto como diablos es que tengo todas las ventas alli si anteriormente ya habian sido filtradas... ¿como lo soluciono?


he intentado crear un array independiente utilizando el mismo foreach conque hago las operaciones extra, pero obvio no funciona, al hacer el foreach ya tiene todo sin filtrar.


Inclusive a modo de prueba hice esto, todo bien, filtrado como debe.

Código PHP:
Ver original
  1. public function test(){
  2. return $evento = $this->detalle_evento(1, 4);
  3. }


Luego esto, ERROR, datos sin filtrar.
Código PHP:
Ver original
  1. public function test(){
  2. $evento = $this->detalle_evento(1, 4);
  3. return $evento->ventas;
  4. }


En el momento que doy entre a la siguiente linea ya me muestra todo sin filtrar