如何将Laravel Query Builder结果作为整数

时间:2016-08-07 23:27:15

标签: php laravel laravel-5 eloquent laravel-5.2

我使用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);

此处查询获取Store_Products中存在的给定store_id的产品。

问题是,当我使用Query Builder时,它会将id(产品的主键)返回string。看起来演员阵容有问题。

我该如何解决这个问题?

非常感谢你。

2 个答案:

答案 0 :(得分:5)

转换不是解决方案,而是解决问题的方法。您的实际问题缺少Authentication插件。

检查mysqlnd是否安装如此

mysqlnd

如果没有安装,你需要安装它(假设你有php5)

$ sudo dpkg -l | grep 'mysqlnd'

这些命令适用于 ubuntu 。如果您还有其他内容,只需将它们转换为适当的操作系统即可。

答案 1 :(得分:2)

当按select提取时,它会使用底层驱动程序返回的原始数据填充$attribute内部属性,因此通常将MySQL驱动程序配置为将所有列作为字符串返回。这里它不会将id属性强制转换为整数。

您必须手动将其强制转换为整数。您可以使用(int) $variable语法将其转换为正在访问模型属性的整数,或者您可以出于此原因进行更改。

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

或者您可以投射属性

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