Как получить результат Laravel Query Builder как целое число

Я использую Laravel Query Builder для запроса базы данных MySQL, но он возвращает целочисленные значения в виде строковых значений.

У меня есть следующий запрос.

$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); 

Здесь запрос получает Product, который существует в Store_Products для данного store_id .

Проблема в том, что он возвращает id (который является основным ключом для продукта) как string когда я использую Query Builder. Похоже, что что-то не так с кастами.

Как я могу решить эту проблему?

Заранее большое спасибо.

Кастинг – это не решение, а обходной путь к проблеме. В вашей реальной проблеме отсутствует плагин mysqlnd .

Проверьте, установлен ли mysqlnd так

 $ sudo dpkg -l | grep 'mysqlnd' 

Если он не установлен, вам необходимо установить его так (при условии, что у вас есть php5)

 $ sudo apt-get install php5-mysqlnd 

Эти команды предназначены для ubuntu . Если у вас есть что-то еще, просто преобразуйте их в соответствующую ОС.

При select по select он заполняет внутреннее свойство $attribute необработанными данными, возвращаемыми базовым драйвером, поэтому, как правило, драйвер MySQL настроен на возврат всех столбцов в виде строк. Здесь он не присваивает атрибут id целому числу.

Вы должны вручную применить его к целому. вы можете либо использовать (int) $variable синтаксис, чтобы приводить его в целое число «на лету», где вы получаете доступ к атрибуту модели, или вы можете сделать мутатор по этой причине.

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

Или вы можете использовать свой атрибут

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