Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

salut, j'ai une table onlines(id,client,poste,created,profile_id) et une table aides(id,montant,dateinit,created,caisse_id). j'aimerai qe à chaque insertion dans la table onlines, qu'une insertion soit aussi faite dans la table aide. Pour cela j'ai créer un trigger en mysql pour effectuer l'action.
Voici mon action dans mon controlleur

 public function Online($id = null)
      {
        $listusers = TableRegistry::get("Onlines");
        $users = $listusers->query();
        $users->insert(['client','poste','created','profile_id'])
                      ->values(['client'=>$this->request->header('User-Agent'),
                                'poste'=>$this->request->clientIp(),
                                'created' => new Time(),
                                'profile_id' => $id])
                      ->execute();
      }

mon trigger :

CREATE DEFINER = CURRENT_USER TRIGGER `mybd`.`onlines_AFTER_INSERT` AFTER INSERT ON `onlines` FOR EACH ROW
BEGIN
insert into aides(id,montant,delaiinit,created,caisse_id) value('','20000',SYSDATE(),SYSDATE(),'12');
END

l'appel de ma fonction

public function myfonction()
{
    $this->onlines(10);
}

Ce que je veux

mettre à jour automatique la table aide lorsque la table onlines est aussi mise à jour

Ce que j'obtiens

Error: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1

par contre si je supprime le trigger et recrèe sans le trigger j'arrive à bien enregistrer dans la table online seulement. Je sais je peux le faire côté code (php), mais j'aimerai bien le faire côté BD car je veux minimiser l'execution des tâches par le serveur web.

quelqu'un a déjà eu ce problème?

3 réponses


Kareylo
Réponse acceptée

Retire le id de ton trigger

as tu pensé à faire un before ou after save sur ta table ?

romses
Auteur

non mais dans le debug, j'ai bien la requete qui s'execute avec les valeurs bien formatées
insert into onlines(id,client,poste,created,profile_id) values(,'valeur client','ip','date bien formaté','10') sauf que je ne vois pas ou il montre la valeur de l'id

la remarque que j'ai faite est la suivante:
lorsque je retire le trigger tous ce passe bien mais lorsque je l'ajoute hop c'est la catastrophe