Au fur et à mesure que je développe la fonctionnalité d’enregistrement d’arrière-plan d’un composant, le message suivant s'affiche: "Échec de la sauvegarde avec l’erreur suivante: colonne inconnue" créée "dans" liste de champs ""
J'ai construit le composant helloworld conformément au didacticiel Joomla docs: https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Introduction
J'essaie d'étendre le back-end en affichant simplement la liste des éléments ( https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Basic_backend ) pour les modifier (c'est-à-dire, les gérer) record. Pour cela, j'ai copié la vue bannière com_banners du back-end et les fichiers associés (contrôleur, modèle, table, etc.) et ajusté les fichiers pour refléter la structure de l'enregistrement unique de mon composant.
La table de mon composant ne comporte que 3 colonnes, id, voeux et état.
La vue gérer l'enregistrement de mon composant affiche correctement l'enregistrement, mais lorsque je modifie le message d'accueil et que je tente de le sauvegarder, le message d'erreur s'affiche.
"L'enregistrement a échoué avec l'erreur suivante: colonne inconnue 'créée' dans 'liste de champs'"
Comme je l'ai dit, la table de mon composant ne comporte que 3 colonnes, id, voeux et état. L'erreur implique que la requête incluait la colonne supplémentaire "créée". Pourquoi cette colonne supplémentaire est-elle ajoutée à la requête?
@Sharky a suggéré de supprimer $this->created = JFactory::getDate()->toSql();
de la classe Table du composant. Je l'ai fait, puis j'ai eu l'erreur
"L'enregistrement a échoué avec l'erreur suivante: colonne inconnue 'modifiée' dans 'liste de champs'"
Pour le moment, la classe Table pour mon composant ressemble à ceci:
class HelloWorldTableHelloWorld extends JTable
{
/**
* Constructor
*
* @param JDatabaseDriver $db Database connector object
*
* @since 1.5
*/
public function __construct(&$db)
{
parent::__construct('#__helloworld', 'id', $db);
JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_helloworld.helloworld'));
$this->setColumnAlias('published', 'state');
}
}
Vous devez avoir oublié quelque chose lors de l’adaptation des fichiers à la structure de votre table. Lancez une recherche sur created
dans les fichiers. Ce pourrait être cette ligne dans /administrator/com_banners/tables/banner.php
:
$this->created = JFactory::getDate()->toSql();
Regardez également la classe du modèle de votre composant.
Sur la base de votre mise à jour et des conseils que je vous ai donnés (examinez votre composant pour le code spécifique de Banner), dans la classe HelloWorldModelHelloWorld, vous devez supprimer les lignes de la méthode prepareTable:
$table->modified = $date->toSql();
$table->modified_by = $user->id;
$table->version++;