2016-06-23 2 views
2

Я использую этот class для доступа к odoo через PHP XMLRPC. Все работает нормально. Я не могу найти много полей, просто поместив идентификатор указанной записи. Я предполагаю, что должен быть особый способ закодировать идентификатор many2one в поиске. EG: поиск в product.supplierinfo по product_tmpl_id с помощью этого кода я получаю массив, возвращаемый пуста:Поиск по Many2One Поле odoo PHP XMLRPC

$rpc->searchread(array(array("product_tmpl_id","=","3673")),"product.supplierinfo"); 

Searching для записи по идентификатору я получить этот результат:

$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 
     ) 

) 

Как я должен закодировать id многодиагонального поля? Любая помощь будет оценена по достоинству.

+0

Я не привык к php, но мне интересно, почему идентификатор в вашем поисковом массиве (первый фрагмент кода) определен как строка? – CZoellner

+0

@CZoellner благодарит за ваш ответ, насколько я знаю, это не влияет, так как я могу это сделать и правильно найти запись '$ rpc-> read (array (array (" id "," = "," 1 ")), array(), "product.supplierinfo"); ' – rekobeko

ответ

1

В итоге у меня было решение. Как предположил @czoellner, проблема была в том, что тип ID был строкой и должен быть целым числом. Итак, этот код работал нормально.

$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"); 

Надеюсь, что это поможет.

Смежные вопросы