Cómo obtener el resultado de Laravel Query Builder como entero

Estoy usando Laravel Query Builder para consultar la base de datos MySQL pero devuelve valores enteros como valores de cadena.

Tengo la siguiente consulta.

$query = DB::table('store_products')->select('products.id', 'products.name', 'products.unit_type', 'products.price', 'products.image_path', 'products.is_popular', 'store_products.price AS store_price') ->join('products', 'products.id', '=', 'store_products.product_id') ->join('product_categories', 'product_categories.product_id', '=', 'store_products.product_id') ->where('store_products.store_id', $store_id) ->where('store_products.product_id', $product_id); 

Aquí la consulta obtiene el Producto que existe en Store_Products para store_id dado.

El problema es que devuelve id (que es la clave principal para el producto) como string cuando uso el Generador de consultas. Parece que hay algo mal con los moldes.

¿Como puedó resolver esté problema?

Muchas gracias por adelantado.

Casting no es una solución sino una solución al problema. Su problema real es que falta el complemento mysqlnd .

Compruebe si mysqlnd está instalado como tal

 $ sudo dpkg -l | grep 'mysqlnd' 

Si no está instalado, debe instalarlo así (asumiendo que tiene php5)

 $ sudo apt-get install php5-mysqlnd 

Estos comandos son para ubuntu . Si tiene algo más, simplemente conviértalos a su sistema operativo apropiado.

Al buscar por select , llena la propiedad interna $attribute con los datos sin procesar devueltos por el controlador subyacente, por lo que generalmente el controlador MySQL está configurado para devolver todas las columnas como cadenas. Aquí no convierte el atributo id a entero.

Tienes que convertirlo manualmente a entero. puede utilizar la syntax de la (int) $variable para convertirla en un entero en el momento en el que accede al atributo del modelo o puede crear un mutador por ese motivo.

 public function getIdAttribute($value) { return (int) $value; } 

O puedes lanzar tu atributo

 protected $casts = [ 'id' => 'integer', ];