【问题标题】:How to get Laravel Query Builder result as integer如何将 Laravel Query Builder 结果作为整数
【发布时间】:2016-12-13 15:44:23
【问题描述】:

我使用 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 的产品。

问题是,当我使用查询生成器时,它会以string 的形式返回id(产品的主键)。看起来演员阵容有问题。

我该如何解决这个问题?

非常感谢您。

【问题讨论】:

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


【解决方案1】:

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

您必须手动将其转换为整数。您可以使用(int) $variable 语法在访问模型属性的地方即时将其转换为整数,也可以因此创建一个mutator。

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

或者你可以转换你的属性

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

【讨论】:

    【解决方案2】:

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

    检查mysqlnd是否是这样安装的

    $ sudo dpkg -l | grep 'mysqlnd'
    

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

    $ sudo apt-get install php5-mysqlnd
    

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

    【讨论】:

    【解决方案3】:

    这在我做 SUM、IF 和其他东西的原始查询中以某种方式发生。

    但我不想在模型中为访问器或铸件添加更多代码,例如 Zayn Ali 的回答,只是针对这个特定的查询。

    所以我的解决方法是使用MySQL cast function

    $query->selectRaw('CAST(column_1 AS UNSIGNED) AS col1')
    

    请确保您在使用原始查询时了解 SQL 注入。

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 2017-08-28
      • 2016-12-13
      • 2020-03-05
      • 2021-05-22
      • 2023-03-29
      • 2018-11-07
      • 2014-04-10
      • 2019-08-11
      相关资源
      最近更新 更多