web-dev-qa-db-fra.com

JTable - Propriétés d'accès qui n'appartiennent pas à la table spécifiée

Supposons que j'ai deux tables avec la colonne suivante:

#__table1 - id, col1, col2
#__table2 - id, col3, col4

J'ai créé la classe JTable dans tables dossier de mon composant:

class ComponentNameTableTable1 extends JTable
{
    function __construct(&$db)
    {
        parent::__construct('#__table1', 'id', $db);
    }
}

Dans la méthode store de JTable, je dois accéder à col3 & col4

public function store($updateNulls = false)
{
     $col1 = $this->col1; // This is happening
     $col2 = $this->col2; // This is not happening
     $col3 = $this->col3; // This is not happening
     $col4 = $this->col4; // This is not happening
     return parent::store($updateNulls);
}

Veuillez noter que j'ai transmis les données de mon modèle à JTable comme suit:

public function save($data)
{
    // $data here is an array of containing following value:
    // $data = array('col1' => 'somevalue1', 'col2' => 'somevalue2', 'col3' => 'somevalue3', 'col4' => 'somevalue4');

    // It is then passed to the JTable with following:

    $table = $this->getTable();
    $key   = $table->getKeyName();

    // Get Primary Key Value
    $pk = (!empty($data[$key]) ? $data[$key] : (int) $this->getState($this->getName() . '.id'));

    $isNew = true;

    try
    {
        if ($pk > 0)
        {
            $table->load($pk);
            $isNew = false;
        }

        // Bind the data.
        $table->bind($data);

        // Check the data.
        if (!$table->check())
        {
            return false;
        }

        // Store the data.
        if (!$table->store())
        {
            return false;
        }

        // Clean the cache.
        $this->cleanCache();
    }
    catch (Exception $ex)
    {
        throw new RuntimeException('There was an error while saving data');
    }

    $this->setState($this->getName() . '.id', $table->$key);
    $this->setState($this->getName() . '.new', $isNew);

    return true;
}

Ma recherche

Il semble que, JTable exécute une fonction qui filtre davantage les données $ et supprime les clés qui ne sont pas présentes dans #__ table1. Si quelqu'un peut au moins m'amener à cette table, je pourrai la remplacer davantage. J'ai essayé de regarder la méthode bind (). Mais cela ne semble pas filtrer ces $ data car j'ai essayé d'imprimer les données hors de $ data avant que bind () ne soit exécuté dans la fonction JTable.

1
Sahil Purav

A ma connaissance, vous devriez utiliser plusieurs instances de JTable dans votre modèle lorsque vous avez plusieurs tables.

Jetez un coup d'œil à ces modèles dans le système de gestion de contenu (CMS). Ils pourraient vous indiquer comment configurer votre modèle.

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_installer/models/manage.php

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_contenthistory/models/compare.php

1
Walt Sorensen