TransWikia.com

Error Funcion de laravel

Stack Overflow en español Asked by Mau España on November 10, 2021

Estoy intentando realizar un query con lo que me permite Query Builder de laravel, pero no se por que al momento de hacer la siguiente consulta me da un error que no esta definido el id y es la variable que estoy recibiendo en la funcion show.

public function show($id)
    {
      $fac = DB::table('fac_enc as fe')
        ->join('fac_det as fd', function ($join) {
            $join->on('fe.id_fac_enc', '=', 'fd.id_fac_enc')
        ->where('fe.id_fac_enc','=',$id);
        })
        ->get();

      return view('facturas.show',compact('fac'));
    }

introducir la descripción de la imagen aquí

Si alguien supiera el por que pasa esto, se lo agradecere

2 Answers

Ya me funcionó de hecho no se por que algunas veces las cosas no funcionan aunque estén de forma correcta, el código quedó así:

$facturas = DB::table('fac_enc as fe')
                  ->join('fac_det as fd','fe.id_fac_enc','=','fd.id_fac_enc')
                  ->join('producto as p','fd.id_producto','=','p.id_producto')
                  ->join('marca as m','p.id_marca','=','m.id_marca')
                  ->join('categoria as c','p.id_categoria','=','c.id_categoria')
                  ->join('cliente as cli','cli.id_cliente','=','fe.id_cliente')
                  ->where('fe.id_fac_enc','=',$id)
                  ->select('fe.id_fac_enc as id_fac_enc','p.descripcion as producto','m.descripcion as marca','c.descripcion as categoria','precio_venta','cantidad','total','nit','nombre','direccion')
                  ->get();
      return $facturas;
      return view('facturas.show',compact('facturas'));

lo que no entiendo es por qué me aparece este error:

introducir la descripción de la imagen aquí

si en el resultado en json si aparece ese campo y muestra datos.

Answered by Mau España on November 10, 2021

Me parece un tanto complejo y re buscado como haces el join, pero el asunto parece arreglarse si le pasas la varibale $id del modo siguiente:

Tu tienes esta línea de código:

 ->join('fac_det as fd', function ($join) {

Aquí debes usar use() para indicarle que use dentro del contexto de la función anónima una variable que esta por fuera de esta, en este caso $id, del modo siguiente:

 ->join('fac_det as fd', function ($join) use ($id){

Sin embargo al margen de tu pregunta, te recomendaría leer sobre las relaciones en Laravel que te permitirán manejar escenarios como el que tratas de resolver con esta consulta con mayor facilidad.

Ejemplo:

El siguiente código me da como error:

Undefined variable $nombre

Pues $nombre no existe dentro del contexto de la función anónima.

$nombre = "Yo";

$mensaje = function(){
    echo $nombre;
};

$mensaje();

Sin embargo ahora haciendo uso de use($variable) indicaremos que use una variable externa dentro dle contexto de la función anónima, imprimiendo dicho valor:

$nombre = "Yo";

$mensaje = function() use($nombre){
    echo $nombre;
};

$mensaje();

Dando como resultado:

Yo

ACTUALIZACIÓN

Desde PHP 7.4 tenemos a nuestra disposición el uso de las funciones flecha, notemos que el scope entre la función anónimas y las funciones flecha difiere

EJEMPLO

$resultado = 10;

//CON FUNCIONES ANÓNIMAS

$operacion2 = function () use($resultado){
    return $resultado * 10;
};

echo $operacion2();


//CON FUNCIONES FLECHA

$operacion = fn() => $resultado * 10;

echo $operacion();

Dando como resultado 100 en ambos casos.

REFERENCIAS

Answered by BetaM on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP