从服务器获取时 Laravel 将 Int 转换为字符串的问题?

Posted

技术标签:

【中文标题】从服务器获取时 Laravel 将 Int 转换为字符串的问题?【英文标题】:Issue with Laravel casting Int to string when fetching from server? 【发布时间】:2021-07-20 00:58:13 【问题描述】:

我的 Web 应用程序在服务器上运行。我在本地测试了代码,它工作正常。我从本地服务器获取 id 作为 int,但在托管服务器中获取字符串。

使用 php 7.3

$data = DB::table('users')
->select('id')
->get();

$data = $data->pluck(id);

(本地) 输出 => [1,2,3]

(托管) 输出 => ["1","2","3"]

谁能帮助解决这个问题?我可以循环输入类型转换,但我的控制器中有 100 个函数。无法对每个查询进行类型转换。

【问题讨论】:

***.com/questions/31527050/… 可能会有所帮助 【参考方案1】:

你可以在你的模型中使用铸造Attribute Casting

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

【讨论】:

【参考方案2】:

这是由于生产服务器(托管服务器)上缺少插件。 您需要安装mysqlnd 插件来解决此问题。

您没有提到您使用的是哪个操作系统。如果是Linux,可以检查mysqlnd是否安装了这样

$ sudo dpkg -l | grep 'mysqlnd'

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

$ sudo apt-get install php-mysqlnd

软件包名称可能因 PHP 版本而异。

请参考我的answer 了解更多信息。

【讨论】:

以上是关于从服务器获取时 Laravel 将 Int 转换为字符串的问题?的主要内容,如果未能解决你的问题,请参考以下文章

为啥建议从矩阵中获取最大值的函数->无法将'int(*)[C]'转换为'int(*)[0]

将较大的字符串值转换为数字 laravel。 (int) 给出错误的值

从Int获取单个数字而不使用字符串?

Laravel 5 - 从文件扩展名中获取 MIME 类型

将 JSON 数据从 API 转换为数组并在 Laravel 和 Guzzle HTTP Client 中分别显示?

获取 IllegalArgumentException:尝试添加包含 AtomicInteger int redis 缓存的数据时无法将 String 转换为 AtomicInteger