[MySQL] Error code : 42S22 (1054). Unknown column 'utils' in 'field list'

Hello,

J’ai une erreur SQL lorsque je tente de rajouter un équipement à mon plugin Sonarr.
De mon côté j’ai aucun logs sur mon plugin et j’ai l’impression que mon problème est apparu depuis une mise à jour Jeedom vers la 4.1.23.

Ce genre de problème parle à quelq’un ?
Voici l’erreur que j’ai sur Jeedom:
[MySQL] Error code : 42S22 (1054). Unknown column ‹ utils › in ‹ field list › : INSERT INTO eqLogic SET utils = :utils, id = :id, name = :name, logicalId = :logicalId, generic_type = :generic_type, object_id = :object_id, eqType_name = :eqType_name, isVisible = :isVisible, isEnable = :isEnable, configuration = :configuration, timeout = :timeout, category = :category, display = :display, order = :order, comment = :comment, tags = :tags

Effectivement le utils n’existe pas dans la DB eqLogic. Mais devrait’il exister ?

Merci pour votre aide :slight_smile:

Salut,

Et comment fais-tu pour ajouter un équipement?

Pour l’ajout de l’équipement en tant que tel, je ne fais rien de particulier de mon côté, j’ai laissé la configuration:

<div class="cursor eqLogicAction logoPrimary" data-action="add">
	<i class="fas fa-plus-circle"></i>
	<br>
    <span>{{Ajouter}}</span>
</div>

Donc c’est la méthode add de Jeedom qui devrait être appelée.

Merci pour ton aide :slight_smile:

As-tu quelque chose dans ton preSave ou preInsert?
Une autre possibilité c’est que tu as une méthode ou une propriété sur ta class eqLogic qui met le bazar
n’as-tu pas une propriété « utils » sur ton eqlogic?

1 « J'aime »

Je pense que tu as mis le doigt dessus !
Effectivement j’ai une propriété utils eqLogic…
Je vais mettre ça ailleurs !
Merci beaucoup pour le coup de main :slight_smile:

C’est la couche db qui va dynamiquement chercher les propriétés de l’objet pour les sauver dans un champs de la table correspondante:
fichier db.class.php dans le core, les ligne du code qui utilise reflectionClass

	/**
	*
	*
	* @param type $object
	* @return type
	* @throws RuntimeException
	*/
	private static function getFields($object) {
		$table = is_string($object) ? $object : self::getTableName($object);
		if (isset(self::$fields[$table])) {
			return self::$fields[$table];
		}
		$reflection = is_object($object) ? self::getReflectionClass($object) : new ReflectionClass($object);
		$properties = $reflection->getProperties();
		self::$fields[$table] = array();
		foreach ($properties as $property) {
			$name = $property->getName();
			if ('_' !== $name[0]) {
				self::$fields[$table][] = $name;
			}
		}
		if (empty(self::$fields[$table])) {
			throw new RuntimeException('No fields found for class ' . get_class($object));
		}
		return self::$fields[$table];
	}

en clair, tu peux le laisser dans eqLogic à condition qu’il soit préfixé par underscore:
private $_utils ne sera pas pris en compte.

1 « J'aime »

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