Magento 2 API: Memfilter pesanan menurut atribut ekstensi

10

Saya memiliki ekstensi dengan atribut yang ditugaskan untuk order itemsdipanggil warehouse.
Saya dapat melihat atribut ini di bawah properti " extension_attributes".
Saya perlu memfilter pesanan berdasarkan atribut ini. Saya tidak dapat menemukan dokumentasi tentang cara melakukan ini.

Cuplikan respons API contoh:

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

Filter berikut menghasilkan kesalahan internal:

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

Adakah saran tentang bagaimana saya bisa memfilter pesanan menggunakan atribut gudang melalui API?

- Poin tambahan pada pertanyaan ini:

Dalam hal ini, jika kita akan mengikuti blog Fooman. Lalu bisakah kita memfilter koleksi dengan atribut ekstensi * ?

  • Filter koleksi berdasarkan ekstensi ini. Atribut Harus dijalankan Cepat?
  • Jika kita menggunakan tabel db khusus untuk menyimpan tabel atribut ekstensi ini, lalu bagaimana caranya memfilter? Haruskah itu berfungsi magento frontend dan backend juga.
  • di mana membutuhkan modifikasi dan kelas mana yang perlu ditambahkan atau referensi blog?

Tunggu jawaban yang baik dan jelaskan / jelaskan tentang hal ini?

Jim
sumber
Tidak ada yang menjawab
Bunyamin Inan
1
Sudahkah Anda mendeklarasikan atribut Anda di Module>/etc/extension_attributes.xml?
Thiago Lima
Ya, teman, saya tidak melakukannya.
Amit Bera
2
Anda melakukannya atau tidak? Mungkin ini masalahnya.
Thiago Lima

Jawaban:

4

Anda bisa mencoba ini

/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
Agnes
sumber
ini tidak memberikan jawaban saya :(
Amit Bera
Tolong jelaskan secara singkat
Amit Bera
@AmitBera Anda harus menyimpan atribut di tabel db yang sesuai dan memanggil API yang sesuai, periksa jawaban saya.
Vivek Kumar
@AmitBera Anda meminta saya untuk menjelaskan tentang atribut ekstensi atau tentang menggunakan atribut ekstensi dalam kriteria pencarian di API
Agnes
Saya bertanya tentang kriteria pencarian di API
Amit Bera
1

SearchCriteria tidak memfilter hasil dari respons API sebagai gantinya dari db / koleksi sebagai gantinya, jika atribut khusus dalam extension_attribute tidak tersedia di db sebagai kolom dalam tabel dari mana data diambil, itu tidak akan datang sebagai respons.

Untuk misalnya. Saya membuat panggilan API berikut -

 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

Kemudian karena tidak ada kolom yang disebut acak di tabel sales_order (dari mana API mengambil respons), saya mendapatkan kesalahan berikut;

SQLSTATE [42S22]: Kolom tidak ditemukan: 1054 Kolom tidak dikenal 'acak' di 'di mana klausa', permintaannya adalah: PILIH main_table. * DARI sales_orderSEBAGAI main_tableDI MANA (( random= 'acak'))

Jadi, jika Anda harus memanggil data khusus Anda di API, Anda harus menyimpan di tabel masing-masing dalam kolom baru, maka Anda dapat memanggilnya secara normal menggunakan nama kolom sebagai bidang fiter dan nilai sebagai nilai yang Anda inginkan, seperti di bawah ini;

 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

Saya telah mengujinya sendiri, saya berharap hal yang sama juga berlaku untuk Anda.

Vivek Kumar
sumber
1

Pada saat penulisan ini (Magento 2.2), saya tidak berpikir ada cara untuk memfilter pada atribut ekstensi. Meskipun mereka hadir dalam koleksi yang mendasari adalah selectjika Anda menentukan <join>di extension_attributes.xml, tampaknya seperti Anda tidak bisa filter pada itu.

Terserah pengembang ekstensi untuk menyediakan cara untuk memfilter nilai atribut ekstensi. Anda dapat melihat contoh di modul pembayaran Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

Di plugin itu, Anda dapat melihat bagaimana mereka mengharapkan tabel sudah bergabung (seperti yang didefinisikan dalam extension_attributes.xml), tetapi menerapkan filter secara manual.

Mark van der Sanden
sumber