Implementação whereIn do Laravel de whereJsonContains

Aug 19 2020

Eu tenho este código que funciona bem e retorna uma coleção de item:

$myCollection = MyModel::whereJsonContains('payload->ProductCode->id', "1")->get();

No entanto, quero buscar $ myCollection não apenas quando o valor for 1, mas quando estiver contido em um dos muitos itens da matriz.

 $array = [0 => 1, 1 => 2, 2 => 3]; $myCollection = MyModel::whereJsonContains('payload->ProductCode->id', $array)->get();
 

ATUALIZAÇÕES Quando tento este código, ele retorna dados vazios. Quero dizer, quando uso 1 em vez de "1" . Poderia ser esse o motivo pelo qual não funciona quando uso um array?

$myCollection = MyModel::whereJsonContains('payload->ProductCode->id', 1)->get();

Uma amostra do que a carga útil contém é esta. Suponho que isso poderia dar mais clareza à minha pergunta:

{
    "ProductCode": {
        "id": "1",
        "name": "My Service",
    }
    
}

Executar o código acima retorna dados vazios. Como faço para corrigir isso, por favor?

Respostas

1 DilipHirapara Aug 19 2020 at 08:43

Você precisa seguir sua consulta conforme abaixo.

$array = [0 => 1, 1 => 2, 2 => 3]; // Eloquent PaymentTransaction::whereJsonContains('payload->ProductCode->id',$array)->get();;

 // or
PaymentTransaction::jsonContains('payload->ProductCode->id', $array)->get();

você pode tentar como abaixo também.

$array = [0 => 1, 1 => 2, 2 => 3];
$array = array_values(array_map('strval',$array));
PaymentTransaction::where(function ($query) use ($array) {
   foreach ($array as $id) {
       $query->orWhereJsonContains('payload->ProductCode->id', $id);
   }
})->get();