gpt4 book ai didi

php - YII 无法读取 Postgres 9.4 中的 BIGINT。静默转换为 MAX_INT。适用于 9.5

转载 作者:行者123 更新时间:2023-11-29 13:24:25 25 4
gpt4 key购买 nike

我在 DEV 和 PROD 中有不同的数据库版本。 DEV 使用的是 Postgres 9.5,而 PROD 使用的是 9.4 版。它适用于 DEV,但不适用于 PROD。我只想读取 BIGINT 字段的值。它们被默默地限制为 MAX_INT!我已经在模型规则中将字段设置为“数字”。如何读取正确的值?

哪些步骤会重现问题?

class KwController extends \yii\console\Controller {

public function actionTest() {
$accounts = Account::find()->all();
foreach ($accounts as $account) {
echo "$account->google_id\n";
//echo $account->google_id.PHP_EOL;
//printf("%s\n", $account->google_id);
}
}

class Account extends \yii\db\ActiveRecord
{
public function rules()
{
return [
[['google_id', 'bing_id'], 'number'],
[['name'], 'string', 'max' => 255]
];
}


dev=# \d account
Table "public.account"
Column | Type | Modifiers
-----------+------------------------+------------------------------------------------------
id | integer | not null default nextval('account_id_seq'::regclass)
name | character varying(255) |
google_id | bigint |
bing_id | bigint |


prod=> \d account
Table "public.account"
Column | Type | Modifiers
-----------+------------------------+------------------------------------------------------
id | integer | not null default nextval('account_id_seq'::regclass)
name | character varying(255) |
google_id | bigint |
bing_id | bigint |


dev=# select * from account;
id | name | google_id | bing_id
----+-----------+------------+---------
1 | Test | 1304682651 |
2 | Account 2 | 2712796608 |


prod=> select * from account;
id | name | google_id | bing_id
----+-----------+------------+---------
1 | Account 1 | 3797444208 |
2 | Account 2 | 8817806877 |
3 | Account 3 | 3199585540 |
4 | Account 4 | 1596230720 |
5 | Account 5 | 1389831585 |


$ /usr/sbin/postgres --version
postgres (PostgreSQL) 9.5.2


prod=> \c
psql (9.5.2, server 9.4.4)

预期结果是什么?

我希望输出是

3797444208
8817806877
3199585540
1596230720
1389831585

你会得到什么?

注意 DEV 的值大于 MAX_INT,但它工作正常。每当 PROD 的值大于 MAX_INT 时,它只会打印 MAX_INT。

$ yii kw/test
1304682651
2712796608


$ YII_ENV=prod yii kw/test
2147483647
2147483647
2147483647
1596230720
1389831585

附加信息

Yii 2.0.7、PHP 5.6.19、Windows/Cygwin(开发)、Heroku(生产)

为了以防万一,我还输入了一个错误:https://github.com/yiisoft/yii2/issues/11286

最佳答案

我不得不用这个

$accounts = Account::find()->select(['*', 'google_id' => 'cast(google_id as varchar)'])->all();

但只是在抗议之下。我不喜欢!

警告,如果您使用模式缓存,您可能必须先让它过期,然后才能尝试更改。

'enableSchemaCache' => true,

关于php - YII 无法读取 Postgres 9.4 中的 BIGINT。静默转换为 MAX_INT。适用于 9.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36440228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com