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)会返回数组类型。
select jsonb_array_length(unique_users) from test where unique_users @> '"19"'::jsonb
PgAdmin的结果:
似乎一切都准备好了。但在使用 Yii2 保存新记录后,我收到了一个查询错误:
错误:你无法获得标量的长度
我看到该字段中记录了另一个值 - “”
我尝试将验证规则添加到模型中: ['unique_users','default','value'=> '[]'],即可。 的结果:
...同样的查询问题 - 值不是数组。 jsonb_typeof(unique_users)会返回字符串类型。
如何将空数组插入jsonb列?
答案 0 :(得分:2)
我认为你不小心发送了一个空字符串作为unique_users
字段的值。如果该值完全为空,则应采用该列的默认DB值。保存时请确保unique_users
字段完全为空(null
)。
但是,您也可以使用默认值规则执行此操作。这应该可以解决问题:
['unique_users', 'default', 'value' => json_encode([])],
答案 1 :(得分:1)
['unique_users', 'default', 'value' => []],