Laravel whereIn ใช้งาน whereJsonContains

Aug 19 2020

ฉันมีรหัสนี้ที่ใช้งานได้ดีและส่งคืนคอลเลกชัน 1 รายการ:

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

อย่างไรก็ตามฉันต้องการดึง $ myCollection ไม่ใช่แค่เมื่อค่าเป็น 1 แต่เมื่อมีอยู่ในหนึ่งในหลายรายการอาร์เรย์

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