web-dev-qa-db-fra.com

stocker l'identifiant à l'aide de JTables

J'essaie d'insérer la valeur id à l'aide de JTable, mais il semble que j'ai manqué quelque chose et que j'ai commis l'erreur en le faisant. Quels changements dois-je faire pour que cela fonctionne? Merci d'avance

$db = $this->getDbo();
$query = $db->getQuery(true);

$data = array(
['articleId'] = $this->get('id'),
['title'], 
['sharetoken']
);

$values = array($db->quote('id'), $db->quote($title), $db->quote($token));

$query
  ->insert($db->quoteName('#__share_draft'))
  ->columns($db->quoteName($data))
  ->values(implode(',', $values));


$db->setQuery($query);
$table->save($data);

return $db->execute();
1
Nikita Dhiman

Votre $data doit être composé uniquement de noms de colonnes et non de valeurs.

$data = array('articleId', 'title', 'sharetoken');

et $values _ ne dispose pas de id correct pour le moment, puisque vous ne faites que citer une chaîne, et non une valeur d’id.

$values = array($db->quote($this->get('id')), $db->quote($title), $db->quote($token));

Donc, le code complet devrait ressembler à ceci:

$db = $this->getDbo();
$query = $db->getQuery(true);

$data = array('articleId', 'title', 'sharetoken');
$values = array($db->quote($this->get('id')), $db->quote($title), $db->quote($token));

$query
    ->insert($db->quoteName('#__share_draft'))
    ->columns($db->quoteName($data))
    ->values(implode(',', $values));


$db->setQuery($query);
$table->save($data);

return $db->execute();

Vous pouvez avoir des noms de colonne et des valeurs dans le même array (si cela vous semble plus logique), mais cela nécessite quelques modifications.

Par exemple:

$data = array(
  'articleId'  => $db->quote($this->get('id')),
  'title'      => $db->quote($title),
  'sharetoken' => $db->quote($token)
);

$query
    ->insert($db->quoteName('#__share_draft'))
    ->columns($db->quoteName(array_keys($data)))
    ->values(implode(',', array_values($data)));

Vérifier si un identifiant existe dans la table

$db = $this->getDbo();
$query = $db->getQuery(true);

$query
  ->select('*')
  ->from($db->quoteName('#__share_draft'));
  ->where($db->quoteName('articleId') . ' = '. $db->quote($this->get('id')));

$db->execute();
$num_rows = $db->getNumRows();

if ($num_rows > 0) {
  // article with this ID exists
} else {
  // article dosen't exist
}
2
Rene Korss