按 Many2One 字段搜索 odoo PHP XMLRPC
Search by Many2One Field odoo PHP XMLRPC
我正在使用这个 class 通过 PHP XMLRPC 访问 odoo。
几乎一切正常。我无法仅通过放置引用记录的 ID 来搜索 many2one 字段。我想应该有一种特殊的方法来在搜索中对 many2one id 进行编码。
EG:使用此代码通过 product_tmpl_id 在 product.supplierinfo 中搜索我得到返回的空数组:
$rpc->searchread(array(array("product_tmpl_id","=","3673")),"product.supplierinfo");
通过 ID 搜索记录我得到了这个结果:
$rpc->read(array(1),"", "product.supplierinfo");
Array
(
[0] => Array
(
[create_uid] => Array
(
[0] => xxxxx
[1] => xxxxx xxxxx
)
[product_code] =>
[create_date] => 2016-06-22 11:08:00
[name] => Array
(
[0] => 1438
[1] => Provider one
)
[product_uom] => Array
(
[0] => 1
[1] => Unit(s)
)
[sequence] => 1
[product_name] =>
[__last_update] => 2016-06-22 11:42:28
[company_id] => Array
(
[0] => 1
[1] => Company Name
)
[write_uid] => Array
(
[0] => xxxx
[1] => xxxxxx xxxxx
)
[delay] => 1
[write_date] => 2016-06-22 11:42:28
[pricelist_ids] => Array
(
)
[display_name] => Provider One
[min_qty] => 0
[qty] => 0
[product_tmpl_id] => Array
(
[0] => 3673
[1] => Product Name
)
[id] => 1
)
)
我应该如何编码 many2one 字段的 id?
任何帮助将不胜感激。
终于找到了解决方案。正如@czoellner 所建议的那样,问题在于 ID 的类型是字符串并且必须是整数。所以,这段代码工作正常。
$rpc->searchread(array(array("product_tmpl_id","=",3673)),"product.supplierinfo");
另一方面必须考虑product.product 的id 和product.template 的id 之间的问题,因为它们是不同的。 table product.supplierinfo 使用 product.template 的 id 而不是 product.product。这导致搜索 table produc.supplierinfo 必须首先找到产品的 product_tmpl_id 来引用产品。因此,要查找产品的所有供应商:
#search it by id
$prod_odoo = $rpc->read(array(1),"product.product",array());
#every search returns a 2 dimension array
$prod_suppliers = $rpc->searchread(array(array("product_tmpl_id","=",(int)$prod_odoo[0]["product_tmpl_id"][0])),"product.supplierinfo");
希望对您有所帮助。
我正在使用这个 class 通过 PHP XMLRPC 访问 odoo。 几乎一切正常。我无法仅通过放置引用记录的 ID 来搜索 many2one 字段。我想应该有一种特殊的方法来在搜索中对 many2one id 进行编码。 EG:使用此代码通过 product_tmpl_id 在 product.supplierinfo 中搜索我得到返回的空数组:
$rpc->searchread(array(array("product_tmpl_id","=","3673")),"product.supplierinfo");
通过 ID 搜索记录我得到了这个结果:
$rpc->read(array(1),"", "product.supplierinfo");
Array
(
[0] => Array
(
[create_uid] => Array
(
[0] => xxxxx
[1] => xxxxx xxxxx
)
[product_code] =>
[create_date] => 2016-06-22 11:08:00
[name] => Array
(
[0] => 1438
[1] => Provider one
)
[product_uom] => Array
(
[0] => 1
[1] => Unit(s)
)
[sequence] => 1
[product_name] =>
[__last_update] => 2016-06-22 11:42:28
[company_id] => Array
(
[0] => 1
[1] => Company Name
)
[write_uid] => Array
(
[0] => xxxx
[1] => xxxxxx xxxxx
)
[delay] => 1
[write_date] => 2016-06-22 11:42:28
[pricelist_ids] => Array
(
)
[display_name] => Provider One
[min_qty] => 0
[qty] => 0
[product_tmpl_id] => Array
(
[0] => 3673
[1] => Product Name
)
[id] => 1
)
)
我应该如何编码 many2one 字段的 id? 任何帮助将不胜感激。
终于找到了解决方案。正如@czoellner 所建议的那样,问题在于 ID 的类型是字符串并且必须是整数。所以,这段代码工作正常。
$rpc->searchread(array(array("product_tmpl_id","=",3673)),"product.supplierinfo");
另一方面必须考虑product.product 的id 和product.template 的id 之间的问题,因为它们是不同的。 table product.supplierinfo 使用 product.template 的 id 而不是 product.product。这导致搜索 table produc.supplierinfo 必须首先找到产品的 product_tmpl_id 来引用产品。因此,要查找产品的所有供应商:
#search it by id
$prod_odoo = $rpc->read(array(1),"product.product",array());
#every search returns a 2 dimension array
$prod_suppliers = $rpc->searchread(array(array("product_tmpl_id","=",(int)$prod_odoo[0]["product_tmpl_id"][0])),"product.supplierinfo");
希望对您有所帮助。