2017-06-14 4 views
2

Nous travaillons sur un site web basé sur SilverStripe et ce site est connecté à une base de données SugarCRM.Ajouter des valeurs multiples à une colonne

Nous avons créé un formulaire avec un CheckboxSet avec plusieurs valeurs et stocker une variable appelée $data['Interessen']

$set_entry_parameters = array(
    "session" => $session_id, 
    "module_name" => "Contacts", 
    "name_value_list" => array(
     array(
      "name" => "interessen_c", 
      "value" => $data['Interessen']['fotografie'] 
     ), 
     array(
      "name" => "interessen_c", 
      "value" => $data['Interessen']['dance'] 
     ) 
    ) 
); 

Maintenant le dernier tableau avec "interessen_c" remplace les valeurs précédentes. Nous voulons ajouter plus d'une valeur à la fois.

Comment est-ce possible?

+1

Pouvez-vous clarifier la question s'il vous plaît? Il est difficile de savoir comment reproduire votre problème en ce moment –

+0

U peut directement utiliser comme "name_value_list" => json_encode (array ($ data ['Interessent'] ['fotografie'], $ data ['Interessen'] ['dance '], $ data [' Interessen '] [' etc '])); Pendant la récupération, vous pouvez le décoder afin que vous obteniez le tableau simple comme précédemment: json_decode (set_entry_parameters ["name_value_list"]); –

Répondre

1

Si le contenu de $ data [ « Interessen »] ne peuvent avoir des valeurs d'une liste fixe de possibilités, je vous recommande de faire le champ interessen_c dans le type multienum (champ « multi-Dropdown Sélection ») .

Pour ce champ, créez une liste de tous les éléments disponibles dans Sugar (par exemple, dans Studio ou créez manuellement l'entrée app_list_strings via le code).

Sugar prendra alors en charge plusieurs valeurs dans ce champ et les affichera bien. Si votre programme écrit les données en communiquant avec l'API REST de Sugar, vous pouvez simplement passer le tableau $data['Interessen'] comme valeur pour interessen_c et Sugar saura quoi en faire.

Si votre programme écrit les données directement à la interessen_c champ dans la base de données, le contenu du champ doit respecter le format suivant:

^value1^,^value2^,^value3^

Donc, avec ^ autour de chaque valeur et tous les éléments étant séparés par ,

Voici un exemple de la façon de convertir les valeurs de tableau à une telle chaîne en PHP:

$interessen = array(); 
foreach ($data['Interessen'] as $value) { 
    // add value surrounded by^to array 
    $interessen[] = "^$value^"; 
} 
// transform values in array to string with items being separated by , 
$interessen = implode(',', $interessen); 

Side-Note:

De l'intérieur, on peut utiliser le sucre encodeMultienumValue($arr) et unencodeMultienum($string) convertir tableau en format string db et le dos.
Les deux fonctions sont définies dans include/utils.php

+0

Merci beaucoup. Maintenant, cela fonctionne avec votre solution. Comment avez-vous su que le '^' est requis? Nous n'avons rien trouvé dans la documentation à ce sujet. – moses

+0

@moses Je pense que je l'ai appris à partir de champs enum existants dans le passé. Cependant, si vous google pour 'sugarcrm multienum', le second hit est un [dev blog entry] (https://developer.sugarcrm.com/2013/03/26/dealing-with-multienums-with-sugarcrm/) spécifié le format db – Jay

+0

oh, et s'il vous plaît ne pas oublier d'accepter la réponse afin que les gens savent qu'il a été résolu :) – Jay