Jump to content
LaurentD50

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

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More