Laravel whereIn 구현 whereJsonContains

Aug 19 2020

잘 작동하고 1 개의 항목 컬렉션을 반환하는이 코드가 있습니다.

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

그러나 값이 1 일 때뿐만 아니라 여러 배열 항목 중 하나에 포함될 때 $ myCollection을 가져오고 싶습니다.

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

업데이트이 코드를 시도하면 빈 데이터가 반환됩니다. "1" 대신 1 을 사용할 때를 의미 합니다. 그것이 내가 어레이를 사용할 때 작동하지 않는 이유일까요?

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

페이로드에 포함 된 샘플은 다음과 같습니다. 내 질문에 더 명확성을 줄 수 있다고 생각합니다.

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

위의 코드를 실행하면 빈 데이터가 반환됩니다. 이 문제를 어떻게 해결합니까?

답변

1 DilipHirapara Aug 19 2020 at 08:43

아래와 같이 쿼리를 따라야합니다.

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

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

아래와 같이 시도해 볼 수도 있습니다.

$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();