API ของ Magento 2: กรองคำสั่งซื้อโดยใช้แอตทริบิวต์ส่วนขยาย


10

ฉันมีส่วนขยายที่มีคุณลักษณะที่ได้รับมอบหมายจะเรียกว่าorder items ฉันเห็นคุณลักษณะนี้ใต้คุณสมบัติ " " ฉันต้องการกรองคำสั่งซื้อตามคุณลักษณะนี้ ฉันไม่พบเอกสารใด ๆ เกี่ยวกับวิธีการทำเช่นนี้warehouse
extension_attributes

ตัวอย่างข้อมูลตอบกลับ API:

[items] => Array(
    [0] => Array(
        [extension_attributes] => Array(
            [warehouse] => MyWarehouse
        )
    )
)

ตัวกรองต่อไปนี้สร้างข้อผิดพลาดภายใน:

searchCriteria[filter_groups][2][filters][0][field]=warehouse,searchCriteria[filter_groups][2][filters][0][value]=mywarehouse,searchCriteria[filter_groups][2][filters][0][condition_type]=eq

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการที่ฉันสามารถกรองคำสั่งที่ใช้แอตทริบิวต์คลังสินค้าผ่านAPI?

- ประเด็นเพิ่มเติมเกี่ยวกับคำถามนี้:

ในกรณีนี้ถ้าเราจะติดตามบล็อก Fooman จากนั้นเราสามารถกรองคอลเลกชันด้วยแอตทริบิวต์extension * ได้หรือไม่

  • ตัวกรองคอลเล็กชันด้วยแอททริบิวต์ส่วนขยายนี้ควรจะรันเร็วไหม
  • หากเราใช้ตาราง db แบบกำหนดเองสำหรับบันทึกตารางแอตทริบิวต์ส่วนขยายนี้จะกรองได้อย่างไร มันควรทำงานวีโอไอพีส่วนหน้าและส่วนหลังด้วย
  • จำเป็นต้องปรับเปลี่ยนที่ไหนและคลาสใดต้องเพิ่มหรือบล็อกอ้างอิงใด ๆ

รอดีและอธิบาย / ตอบสั้น ๆ ในประเด็นนี้?


ไม่มีใครตอบ?
Bunyamin Inan

1
คุณประกาศแอตทริบิวต์ของคุณได้Module>/etc/extension_attributes.xml?
Thiago Lima

ใช่มนุษย์ฉันไม่ได้ทำ
Amit Bera

2
คุณทำหรือไม่? บางทีนี่อาจเป็นปัญหา
Thiago Lima

คำตอบ:


4

คุณสามารถลองสิ่งนี้

/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=warehouse&searchCriteria[filter_groups][0][filters][0][value]=MyWarehouse&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

นี่ไม่ใช่คำตอบของฉัน :(
Amit Bera

โปรดอธิบายโดยย่อ
Amit Bera

@AmitBera คุณต้องบันทึกแอ็ตทริบิวต์ในตารางของ db และ call API ที่เกี่ยวข้องตรวจสอบคำตอบของฉัน
Vivek Kumar

@AmitBera คุณกำลังขอให้ฉันอธิบายเกี่ยวกับแอตทริบิวต์ส่วนขยายหรือเกี่ยวกับการใช้แอตทริบิวต์ส่วนขยายในเกณฑ์การค้นหาใน API
Agnes

ฉันถามเกี่ยวกับเกณฑ์การค้นหาใน API
Amit Bera

1

searchCriteria ไม่กรองผลลัพธ์จากการตอบสนอง API แทนจาก db / collection แทนหากแอตทริบิวต์ที่กำหนดเองใน extension_attribute ไม่พร้อมใช้งานใน db เป็นคอลัมน์ในตารางจากที่มีการดึงข้อมูลจะไม่เกิดการตอบสนอง

สำหรับเช่น ฉันโทรตาม API -

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=random&searchCriteria[filter_groups][0][filters][0][value]=random&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

จากนั้นเนื่องจากไม่มีคอลัมน์ที่เรียกว่าสุ่มในตาราง sales_order (ซึ่ง API กำลังดึงการตอบกลับ) ฉันได้รับข้อผิดพลาดดังต่อไปนี้

SQLSTATE [42S22]: ไม่พบคอลัมน์: 1054 คอลัมน์ที่ไม่รู้จัก 'สุ่ม' ใน 'where clause', แบบสอบถามคือ: SELECT main_table. * จากsales_orderAS main_tableWHERE (( random= 'สุ่ม'))

ดังนั้นหากคุณต้องเรียกข้อมูลที่กำหนดเองของคุณใน API คุณจะต้องบันทึกในตารางที่เกี่ยวข้องในคอลัมน์ใหม่จากนั้นคุณสามารถเรียกได้ตามปกติโดยใช้ชื่อคอลัมน์เป็นฟิลด์ fiter และค่าตามค่าที่คุณต้องการดังนี้

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=column_name&searchCriteria[filter_groups][0][filters][0][value]=desired_value&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

ฉันได้ทำการทดสอบด้วยตัวเองฉันหวังว่าจะได้ผลเช่นเดียวกันกับคุณเช่นกัน


1

ในขณะที่เขียนนี้ (Magento 2.2) ฉันไม่คิดว่าจะมีวิธีการกรองคุณลักษณะส่วนขยาย แม้ว่าจะมีอยู่ในคอลเลกชันพื้นฐานselectหากคุณกำหนด<join>ในextension_attributes.xmlดูเหมือนว่าคุณจะไม่สามารถกรองได้

ขึ้นอยู่กับผู้พัฒนาส่วนขยายเพื่อให้วิธีการกรองค่าของแอตทริบิวต์ส่วนขยาย คุณสามารถดูตัวอย่างได้ในโมดูลการชำระเงินของ Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

ในปลั๊กอินนั้นคุณสามารถดูว่าพวกเขาคาดหวังว่าตารางจะเข้าร่วมได้อย่างไร (ตามที่กำหนดไว้extension_attributes.xml) แต่ใช้ตัวกรองด้วยตนเอง


0

@AmitBera ฉันไม่แน่ใจ 100% สำหรับสิ่งนี้และมันไม่ได้ให้คำตอบสำหรับคำถามของคุณทั้งหมด แต่ฉันคิดว่าก่อนอื่นคุณต้องใช้ JoinProcessor ก่อนเพื่อค้นหาเกณฑ์แล้วใช้ filer คุณสามารถตรวจสอบวิธีการทำเพิ่มเติมได้ที่http://devdocs.magento.com/guides/v2.2/extension-dev-guide/searching-with-repositories.htmlนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.