DB objet de Can Joomla ajouter plusieurs lignes à la fois? MySQL peut le faire comme ceci:
INSERT INTO x (a,b) VALUES ('1', 'one'), ('2', 'two'), ('3', 'three')
7 Réponses :
Dans votre modèle, vous pouvez faire ceci:
$db = JFactory::getDBO();
Oui c'est ce que j'ai fait. Le problème est que je dois faire deux requêtes distinctes pour insertion et mise à jour. Avec une instance JTAble, il choisira automatiquement en fonction de la présence de la clé primaire.
Je pensais que vous avez dit que vous devez faire 2 requêtes distinctes Insérer et mettre à jour. Alors pourquoi Jtable doit-il choisir? Il aurait également également besoin de faire l'insertion et la mise à jour également, à moins que quelque chose que vous n'avez pas oublié de mentionner ce que vous voulez faire.
Vous n'avez pas besoin il suffit d'utiliser ceci: - p> $ db = $ this-> getDBO (); code>
$query = "
INSERT INTO x (a,b)
VALUES
('1', 'one'),
('2', 'two'),
('3', 'three')
";
$this->_db->setQuery($query);
$this->_db->query();
Vous pouvez utiliser:
$db = JFactory::getDbo(); $query = $db->getQuery(true); // !important, true for every new query $query->insert('#__table_name'); // #__table_name = databse prefix + table name $query->set('`1`="one"'); $query->set('`2`="two"'); $query->set('`3`="three"'); /* or something like this: $query->columns('`1`,`2`,`3`'); $query->values('"one","two","three"'); */ $db->setQuery($query); $db->query();
J'ai corrigé la réponse testé avec $ query-> colonnes, $ query-> valeurs comme il a été initialement mal.
Cela fonctionne très bien, sauf si vous l'essayerez sur 1000 des rangées, je préférerais suggérer la solution de Martin en haut pour l'efficacité.
Essayez ceci:
$db = JFactory::getDbo(); $query = $db->getQuery(true); $query->insert('x'); $query->columns('a,b'); $query->values('1', 'one'); $query->values('2', 'two'); $query->values('3', 'three'); $db->setQuery($query); $db->query();
Essayez ceci, si vous avez des valeurs dans un tableau:
$query = $this->db->getQuery(true); $query->insert($this->db->quoteName('#__table_name')); $query->columns($this->db->quoteName(array('col_1','col_2','col_3','col_4'))); for($i=0; $i < lengthOfArray; $i++) { $values= $arr_1[$i].','.$this->db->quote($arr_2[$i]).','.$this->db->quote($arr_3[$i]).','. $arr_4[$i]; $query->values($values); } $this->db->setQuery($query); $result = $this->db->query();
Dans la dernière version de Joomla !, vous pouvez l'utiliser sa propre classe DB comme suit. Pensez à utiliser 'QUOTENAME ()' et '(citation)' fonctions que vous aviez besoin.
$dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $columns = array('col_one','col_two', 'col_three'); $values = array(); //if you need, here you can use forloop/foreach loop to populate the array $values[] = 'val_1, val_2, val_3'; // first row values $values[] = 'val_4, val_5, val_6'; // second row values ... $query->insert($dbo->quoteName('#__table_name')); $query->columns($columns); $query->values($values); $dbo->setQuery($query); $dbo->query();
... $columns = array('user_id', 'type', 'object', 'lvl', 'date'); $values = array(); foreach ($batch as $row) { $array = array( $row->user_id, $db->quote($row->type), $db->quote($row->object), $db->quote($row->lvl), $db->quote($row->date), ); $values[] = implode(',', $array); } $query->insert($db->quoteName('#activity_log')); $query->columns($db->quoteName($columns)); $query->values($values); $db->setQuery($query); $result = $db->execute();
Comment insérons-vous dans Joomla?
$ ceci-> Store ($ données, 'Nom du nom') code> - Utilisation de l'instance JTAble