it-swarm.com.de

JTable - Greifen Sie auf Eigenschaften zu, die nicht zur angegebenen Tabelle gehören

Angenommen, ich habe zwei Tabellen mit folgender Spalte:

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

Ich habe die JTable-Klasse in Tabellen erstellt Ordner meiner Komponente:

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

In der Store-Methode von JTable muss ich auf col3 & col4 Zugreifen.

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);
}

Bitte beachten Sie, dass ich die Daten von meinem Modell wie folgt an JTable übergeben habe:

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;
}

Meine Forschung

Es scheint, dass JTable eine Funktion ausführt, die $ data weiter filtert und Schlüssel entfernt, die in #__ table1 nicht vorhanden sind. Wenn mich mindestens jemand an diesen Tisch bringen kann, kann ich ihn weiter überschreiben. Ich habe versucht, die bind () -Methode zu betrachten. Aber es scheint nicht zu filtern, dass $ data, als ich versuchte, das aus $ data heraus zu drucken, bevor bind () in der JTable-Funktion ausgeführt wird.

1
Sahil Purav

Nach meinem Verständnis sollten Sie mehrere JTable-Instanzen in Ihrem Modell verwenden, wenn Sie mehrere Tabellen haben.

Schauen Sie sich diese Modelle im CMS an, sie geben Ihnen möglicherweise eine Anleitung zum Einrichten Ihres Modells.

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