$this->assertDatabaseHas()
不适用于JSON
/JSONb
列。
那么,如何在Laravel中测试这些类型的列呢?
目前,我有一个商店的行动。如何执行Assert,即保存了具有预定义值的特定列。
就像['options->language', 'en']
是不是一个选项,因为我有一个广泛的JSON与 meta的东西。
如何在DB中立即检查JSON
?
$this->assertDatabaseHas()
不适用于JSON
/JSONb
列。
那么,如何在Laravel中测试这些类型的列呢?
目前,我有一个商店的行动。如何执行Assert,即保存了具有预定义值的特定列。
就像['options->language', 'en']
是不是一个选项,因为我有一个广泛的JSON与 meta的东西。
如何在DB中立即检查JSON
?
5条答案
按热度按时间relj7zay1#
UPD
现在可以做like that。
我已经用这个一行程序解决了它(根据你的模型/字段调整它)
$this->assertEquals($store->settings, Store::find($store->id)->settings);
xdnvmnnf2#
Laravel 7+
不知道这个解决方案能用多久。
我找到了解决办法。忽略一些数据标签,一切都是可访问的,我只是在玩我的测试来弄清楚它。
nxagd54h3#
注意:以下解决方案在Laravel版本上测试:9.x和Postgres版本:12.x**,解决方案可能无法在较低版本的laravel上工作**
将json列Assert到数据库中有两个条件。
1.对象
考虑Object在数据库的json列中,如下所示:
它可以Assert为
2.数组
考虑array在json列中,如下所示:
它可以Assert为
qcuzuvrc4#
如果要在数据库中Assert数组,可以使用如下方法:
t2a7ltrp5#
在值上使用
json_encode
对我来说很有效: