web-dev-qa-db-fra.com

JTable store () renvoie true mais aucune ligne n'est insérée

Voici la définition de la classe

class MyTable extends JTable{

    public $parent_id = null;
    public $hits = 1;

    function __construct()
    {
        parent::__construct('#__mytable', 'parent_id', JFactory::getDbo());
    }
}

et voici le code problématique.

$table = new MyTable();
if(!$table->load($id)){ //If the record doe not exist
    $table->parent_id=id; //Setting the id for the new row
    echo "Should be storing new table row...";
    $table->store(true);//New record should be created here
}else{
    echo "Record existed existed : ";
    $table->hit();
    echo "$table->hits hits";
}

Le problème est que $ table-> store renvoie true mais ne crée aucun enregistrement dans la base de données.

Si j'ajoute des enregistrements manuellement, load () fonctionne bien. Mais il ne parvient pas à insérer une nouvelle ligne. getErrors () retourne NULL

3
dsat

Apparemment, store () insère une ligne niquement si la clé primaire n’est pas définie (par exemple, parent_id est NULL). Cela ne fonctionne pas dans mon cas car le parent_id est une clé étrangère et je dois le spécifier.

La seule solution que j'ai proposée consiste à ajouter la ligne à l'aide d'une méthode différente (par exemple, exécuter une requête manuellement).

1
dsat

Je crois que vous souhaitez lier vos données au niveau de la base de données avec une clé primaire-étrangère, n'est-ce pas? Mais pour info, Joomla lui-même n’utilise pas leurs données de cette façon. Les tables de Joomla n'utilisent pas de liaisons de clé étrangère au niveau de la base de données, mais Joomla les gère au niveau de l'application (code). Si vous souhaitez continuer avec la méthode standard Joomla, et également si vous développez un composant pour un usage public/commercial, vous devez supprimer la dépendance à la clé étrangère au niveau de la base de données, puis utiliser JTable pour accomplir la tâche ci-dessus.

Vous trouverez une discussion relative ici: https://joomla.stackexchange.com/a/4541/3869

2
SD.