Erreur SQL lors de update de mon plugin

J’ai un plugin avec le code suivant qui doit être exécuté après sa mise à jour:

function defauts_update() {
        log::add("defauts","info","Mise à jours de commandes pour le pugin defauts");
        $cmds = cmd::byLogicalId("defaut");
        foreach ($cmds as $cmd) {
                if ($cmd->getEqType() == "defauts") {
                        log::add("defauts","info","  Mise à jour de la commande " . $cmd->getId());
                        $cmd->setIsVisible(false);
                        $cmd->save();
                }
        }
}

Lors des mises à jour, j’ai l’erreur

[MySQL] Error code : 22007 (1366). Incorrect integer value: '' for column `jeedom`.`cmd`.`isVisible` at row 1 : UPDATE `cmd` SET `id` = :id, `logicalId` = :logicalId, `generic_type` = :generic_type, `eqType` = :eqType, `name` = :name, `order` = :order, `type` = :type, `subType` = :subType, `eqLogic_id` = :eqLogic_id, `isHistorized` = :isHistorized, `unite` = :unite, `configuration` = :configuration, `template` = :template, `display` = :display, `value` = :value, `isVisible` = :isVisible, `alert` = :alert WHERE id = :id

J’ai effectué divers tests et je suis arrivé aux constatations suivantes:

  • Pas d’erreur si la commande n’est pas visible avant l’update (pas de mise à jour nécessaire).
  • Pas d’erreur si je mets setIsVisible(true) et que la commande est visible avant l’update.
  • Pas d’erreur si je mets setIsVisible(true) et que la commande n’est pas visible avant l’update.

Le seul cas qui ne fonctionne pas est donc celui où la commande est visible avant l’update et ne doit plus l’être après. Pas de chance, c’est justement le celui qu’il me faut. :disappointed_relieved:

J’utilise le core 4.1.22
J’en peux rendre la commande visible ou invisible via l’interface web de mon plugin sans problème aussi bien avant qu’après l’update.

Hello,

D’après l’erreur SQL, la bdd attend un nombre (int) et non pas un bool.
As tu essayé avec 0 a la place de false ?
Ou '0'? (Il me semble que le core converti si c’est un string)

Car dans l’erreur la valeur est NULL

1 « J'aime »

Super!
ça marche avec 0 (numérique).

Mauvais réflexe de vouloir utiliser « true » et « false » pour du boolean. :thinking:

Merci et bonne journée

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.