я использую это учебный класс для доступа к odoo через PHP XMLRPC.
Все работает почти нормально. Я не могу выполнить поиск по многим полям, просто указав идентификатор указанной записи. Я предполагаю, что должен быть особый способ кодировать идентификатор many2one в поиске.
Например: поиск в product.supplierinfo по product_tmpl_id с использованием этого кода возвращает массив emtpy:
$rpc->searchread(array(array("product_tmpl_id","=","3673")),"product.supplierinfo");
При поиске записи по идентификатору я получаю такой результат:
$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?
Любая помощь будет оценена.
Наконец-то у меня было решение. Как предположил @czoellner, проблема заключалась в том, что тип идентификатора был строкой и должен быть целым числом. Итак, этот код работал нормально.
$rpc->searchread(array(array("product_tmpl_id","=",3673)),"product.supplierinfo");
С другой стороны, необходимо учитывать проблему между идентификатором product.product и идентификатором product.template, поскольку они различаются. Таблица product.supplierinfo использует идентификатор product.template вместо product.product. Поэтому для поиска по таблице 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");
Надеюсь это поможет.
Других решений пока нет …