Magento 2 API:拡張属性による注文のフィルタリング


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テーブルを使用する場合、どのようにフィルタリングできますか?Magentoのフロントエンドとバックエンドでも動作するはずです。
  • 変更が必要な場所、追加する必要があるクラス、または参照ブログ

この点についての良い説明と簡単な説明を待ちますか?


誰も答えなかった?
Bunyamin Inan

1
で属性を宣言しましたModule>/etc/extension_attributes.xmlか?
チアゴ・リマ

はい、私はそれをしませんでした。
アミットベラ

2
あなたはしましたか、しませんでしたか?多分これが問題です。
チアゴ・リマ

回答:


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

これは私の答えを与えられていません:(
アミットベラ

簡単に説明してください
アミットベラ

@AmitBeraあなたはdbの対応するテーブルに属性を保存し、それに応じてAPIを呼び出す必要があります。私の答えを確認してください。
Vivek Kumar

@AmitBeraあなたは私に拡張属性について、またはAPIの検索条件で拡張属性を使用することについて説明するように求めています
Agnes

APIの検索条件について質問しています
Amit Bera

1

searchCriteriaは、代わりにdb / collectionからのAPI応答の結果をフィルターしません。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不明な列 'random'が 'where句'にあり、クエリはSELECT main_table。* FROM sales_orderAS main_tableWHERE((random= 'random'))でした

したがって、APIでカスタムデータを呼び出す必要がある場合は、それぞれのテーブルの新しい列に保存する必要があります。以下のように、通常は列名をフィッターフィールドとして、値を目的の値として使用して呼び出すことができます。

 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)では、拡張属性でフィルターする方法はないと思います。in 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います)が、手動でフィルターを適用できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.