我有my_table
列sentiments
的表DB::table('my_table')
->whereRaw("sentiments ?| ARRAY['10216', '10191']")
->update([
'sentiments' => DB::raw("sentiments - '10216' - '10191'")
]);
。我需要删除所有密钥' 10216'和' 10191'从这一栏。
我尝试在Laravel中做下一步:
[Illuminate\Database\QueryException]
SQLSTATE[42601]: Syntax error: 7 ОШИБКА: ошибка синтаксиса (примерное положение: "$1")
LINE 1: ...= sentiments - '10216' - '10191' where sentiments $1| ARRAY[...
^ (SQL: update "my_table"
set "sentiments" = sentiments - '10216' - '10191'
where sentiments ?| ARRAY['10216', '10191'])
但我有下一个错误:
sentiments ??| ARRAY
因为我看到"?"看起来像参数。如何逃避这个符号?
更新
我还尝试写两个问题:[Illuminate\Database\QueryException]
SQLSTATE[42883]: Undefined function: 7 ОШИБКА: оператор не существует: jsonb ??| text[]
LINE 1: ...= sentiments - '10216' - '10191' where sentiments ??| ARRAY[...
^
HINT: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения тип
ов. (SQL: update "my_table" set "sentiments" = sentiments - '10216' - '10191' where sentiments ??|
ARRAY['10216', '10191'])
:
{{1}}
答案 0 :(得分:2)
感谢@degr!它适用于未记录的函数jsonb_exists_any()
:
DB::table('my_table')
->whereRaw("jsonb_exists_any(sentiments, ARRAY['10216', '10191'])")
->update([
'sentiments' => DB::raw("sentiments - '10216' - '10191'")
]);
<强>更新强>
使用此方法,与使用运算符?|
不同,不使用jsonb字段上的索引。
答案 1 :(得分:1)
亲爱的朋友,您可以使用
创建操作员〜@&(LEFTARG = jsonb,RIGHTARG = text [],PROCEDURE = jsonb_exists_any)
并使用
这样编写查询DB::table('my_table')
->whereRaw("sentiments ~@& ARRAY['10216', '10191']")
->update([
'sentiments' => DB::raw("sentiments - '10216' - '10191'")
]);