【问题标题】:How to insert empty array into jsonb column (pgsql) by Yii2?Yii2如何将空数组插入jsonb列(pgsql)?
【发布时间】:2017-11-08 09:46:12
【问题描述】:
  1. 使用 jsonb 类型的新字段创建迁移,不为 null 且默认值 = []。 (存储数据示例:["235", "214"])并将规则添加到模型 [['unique_users'], 'safe']
public function up() { $connection = Yii::$app->getDb(); $sql = 'ALTER TABLE offer ADD unique_users jsonb not null default \'[]\''; $command = $connection->createCommand($sql, []); $command->queryAll(); }

结果:为每一行添加了一个具有默认值 []unique_users 字段。 jsonb_typeof(unique_users) 返回一个 array 类型。

  1. 为测试创建了所需的查询
select jsonb_array_length(unique_users) from test where unique_users @> '"19"'::jsonb

PgAdmin 的结果

似乎一切都准备好了。但是用Yii2保存新记录后,收到查询错误:

错误:您无法获得标量的长度

我看到字段中记录了另一个值 - ""

我尝试将验证规则添加到模型:['unique_users', 'default', 'value' => '[]'],结果:

...有同样的查询问题 - 值不是数组。 jsonb_typeof(unique_users) 返回一个 string 类型。

如何将空数组插入jsonb列?

【问题讨论】:

    标签: postgresql yii2 jsonb


    【解决方案1】:

    我认为您不小心发送了一个空字符串作为 unique_users 字段的值。如果该值完全为空,则应采用该列的默认 DB 值。保存时请确保unique_users 字段完全为空(null)。

    但是,您也可以使用默认值规则来执行此操作。这应该可以解决问题:

    ['unique_users', 'default', 'value' => json_encode([])],
    

    【讨论】:

    • 感谢您的回答,我也尝试过 - 结果相同“[]”jsonb_typeof(unique_users) 的新行返回字符串类型。有什么想法吗?
    • 很奇怪。非常适合我。调用 ->save() 时,您是否 100% 确定值 ($yourModel->unique_users) 为 NULL?
    • 这取决于验证规则:如果默认值为 json_encode([]) - unique_users = ""
    • ... 我只是尝试再次设置默认值 = [] 并且成功了!谢谢大家!看来今天有人辛苦了)
    【解决方案2】:
    ['unique_users', 'default', 'value' => []],
    

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 1970-01-01
      • 2020-03-04
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多