Jump to content

Comment enregistrer des valeurs dans une table de liaison dans un AdminController ?


Recommended Posts

Bonjour à tous,

Débutant dans le dev d'un module prestashop (1.7) sans lien avec les tables de prestashop , j'ai du mal à trouver la solution pour enregistrer des valeurs dans une table de liaison à la validation du formulaire en backoffice.

Le principe général (classique) étant qu'une entrée de la table principale peut appartenir à plusieurs catégories (choisies via un select multiple dans le formulaire).
Dans ma classe principale (extends ObjectModel), j'ai ma variable statique $definition

public static $definition = [

    'table' => 'table_principale'
    ,'primary' => 'id'
   ,fields => [

        'nom' => ['type' => self::TYPE_STRING]   
        (...)
    ]
]
Dans l'AdminController, j'ai la définition de mon formulaire avec le select de catégorie multiple comme suit :
public function renderForm(){
(...)
$this->fields_form = [
    (...)
'input' =>  [
    ['type' => 'text', name => 'nom','label' => 'Nom' 'required => true]
    ,['type' => 'select', name=> 'id_categ[]','label' => $this->l('Catégories'),multiple' => true,'option' => [.....] ]
    (...)
]

]

}
A la soumission du formulaire, pas de pb les valeurs sont bien modifiées dans la table principale sans que j'ai eu à écrire le traitement d'update/ create (c'est cool) mais comment enregistrer les valeurs du champ 'id_categ' dans une table de liaison
qui comporterait les 2 champs suivants id et id_categ.
J'ai aperçu 2 pistes après 10000 recherches 😉 :
La première serait d'utiliser la méthode postProcess() dans mon AdminController pour intercepter la valeur 'id_categ' et remplir "à la main" ma table de liaison. Pas très satisfaisant intellectuellement mais bon, ça fonctionnerait.
La deuxième qui peut-être ferait la mise à jour en base automatiquement serait d'utiliser dans la définition de ma classe principale la clé "associations" mais j'ai du mal à trouver des ressources pour l'utiliser correctement . Je ne sais même pas si c'est une bonne piste :
'associations' => [
    'id_categ' => ['type' => self::HAS_MANY, 'field' => '?', 'object' => 'MON_OBJET_PRINCIPAL?', 'association' => 'NOM_TABLE_LIAISON ?' ]
]
La structure de la table de liaison doit peut-être respecter un nommage des champs bien précis pour que ça fonctionne automatiquement ?
Ou peut-être que la mise à jour automatique est impossible ? 
Si l'un d'entre vous pouvait m'orienter sur des ressources ou m'expliquer le principe, ce serait salvateur .
Je vous remercie par avance et j'espère avoir été assez clair

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...