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
Thiago Lima

是的,伙计,我没有。
阿米特·贝拉

2
你有没有?也许这就是问题所在。
Thiago Lima

Answers:


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中的搜索条件
阿米特·贝拉

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表中没有称为random的列(API从中获取响应),因此出现以下错误;

SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ random”,查询为:SELECT main_table。* FROM sales_orderAS main_tableWHERE((random='random'))

因此,如果必须在API中调用自定义数据,则必须将其保存在相应表的新列中,那么通常可以使用列名作为fiter字段,并使用value作为所需值来调用它,如下所示;

 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>in extension_attributes.xml,则它们存在于基础集合中,似乎您无法对其进行过滤。

扩展开发人员可以提供一种方法来过滤扩展属性的值。您可以在Amazon支付模块中看到一个示例:https : //github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

在该插件中,您可以看到他们如何期望该表已被联接(如在中定义extension_attributes.xml),但是手动应用过滤器。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.