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