2016-12-26 4 views
0

my_tablejsonbの列sentimentsがあります。この列からすべてのキー '10216'と '10191'を削除する必要があります。"?|"でクエリを実行する演算子

私はLaravelで次に何をしよう:

DB::table('my_table') 
    ->whereRaw("sentiments ?| ARRAY['10216', '10191']") 
    ->update([ 
     'sentiments' => DB::raw("sentiments - '10216' - '10191'") 
    ]); 

しかし、私は次のエラーを持っている: "?"

[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']) 

私が見るので、通りパラメータのように見えます。このシンボルをエスケープするには?

UPDATE

また、私は二つの質問書き込もうとしました:sentiments ??| ARRAY:@degrする

[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']) 
+0

あなたは試しましたか? (2つの疑問符) – degr

+0

@degr:アイデアありがとうございますが、それは役に立ちません。私は答えを更新しました。 – mnv

+1

これをチェック - http://stackoverflow.com/questions/16311939/how-to-prevent-pdo-from-interpreting-a-question-mark-as-a-placeholder – degr

答えて

2

感謝を!それは文書化されていない機能jsonb_exists_any()で動作します:

DB::table('my_table') 
    ->whereRaw("jsonb_exists_any(sentiments, ARRAY['10216', '10191'])") 
    ->update([ 
     'sentiments' => DB::raw("sentiments - '10216' - '10191'") 
    ]); 

UPDATE jsonbフィールド上のこのアプローチのインデックス付き

オペレータ?|を使用する場合とは異なり、使用されていません。

関連する問題