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.
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.