2017-08-16 5 views
2

Je veux obtenir des données de partenaire qui ont des informations id, name, et salesperson_id où le 'salesperson_id' est de type many2one (contient l'identifiant et le nom). Voici mon code:Comment obtenir la valeur de type many2one en utilisant php

<?php 
    // Login information 
    $url = 'localhost'; 
    $url_auth = $url . '/xmlrp/common'; 
    $url_exec = $url . '/xmlrpc/object'; 

    $db = 'testing'; 
    $username = 'odoo'; 
    $password = 'odoo'; 

    // Ripcord can be cloned from https://github.com/poef/ripcord 
    require_once('ripcord/ripcord.php'); 

    // Login 
    $common = ripcord::client("$url/xmlrpc/common"); 
    //$common = ripcord::client($url_auth); 
    $uid = $common->authenticate($db, $username, $password, array()); 

    //print("<p>Your current user id is '${uid}'</p>"); 

    $models = ripcord::client($url_exec); 

    $customer = $models->execute_kw(
     $db, 
     $uid, 
     $password, 
     'res.partner', 
     'search_read', 
     array(// Search domain 
      array(
       array('is_company', '=', true), // Query condition 
       array('customer', '=', true)) // Query condition 
      ), 
     array('fields'=> array('name', 'salesperson_id')) 
    ); 

    print("<p><strong>Found customers:</strong><br/>"); 
    foreach ($customer as $customers){ 
     print("${customers[id]} 
       ${customers[name]} 
       {$customers[salesperson_id][0]} 

       <br/>"); 
     } 
    print("</p>"); 
?> 

Il montrera:

Found customers: 
1234 CHLOE 12 
1235 DRY MART 13 
1236 SEEYOU 14 
1237 ED. COMP 15 

!! SOLVED

+1

Votre '$ {clients [salesperson_id]}' est retourne un tableau quand il devrait renvoyer un seul entier. À quoi ressemble 'customers [salesperson_id]'? Je suppose que vous pouvez accéder à l'ID avec $ {customers [salesperson_id] [1]} '. –

+0

@ObsidianAge, Quand je le change en '$ {clients [salesperson_id] [1]}', la page obtient l'erreur '" Cette page ne fonctionne pas localhost est actuellement incapable de traiter cette demande HTTP ERROR 500 " ' – 0987654poiu

+0

Il n'y a pas de champ nommé salesperson_id pour le modèle res_partner. Mais vous pouvez l'obtenir à partir de sale_order comme le champ user_id qui shuld être salesperson_id –

Répondre

1

Je ne sais pas si vous voulez imprimer l'ID ou le nom du commercial. Mais le problème avec votre code lançant une erreur 500 Server est un IndexError. Lorsque vous faites $customers[salesperson_id][1], il échouera sur le premier parce que l'utilisateur n'a pas de vendeur. Ainsi, $customers[salesperson_id] n'est pas un tableau mais un booléen, et essayer d'accéder à n'importe quel index le fera apparaître une erreur.

Je ne suis pas bon avec PHP, donc je vais juste signaler la réponse:

  • $customers[salesperson_id][0] est l'ID du vendeur, $customers[salesperson_id][1] est son nom.
  • Si le client n'a pas de vendeur, $customers[salesperson_id] aura la valeur false.

donc la solution:

  • Vérifiez si $customers[salesperson_id] n'est pas false
  • impression $customers[salesperson_id][0] ou $customers[salesperson_id][1] si $customers[salesperson_id] n'est pas false
+0

c'est du travail maintenant. merci – 0987654poiu

+0

De rien. – Majikat