JoomlaのDBオブジェクトは一度に複数の行を追加できますか?MySQLは次のようにこれを行うことができます:
INSERT INTO x (a,b)
VALUES
('1', 'one'),
('2', 'two'),
('3', 'three')
しかし、Joomla自身の関数は単一のクエリで同じことを達成できますか?現在、各行(同じテーブル)を別々のクエリに挿入するループを実行しています。一度に大量の行を処理する場合は、お勧めできません。
JoomlaのDBオブジェクトは一度に複数の行を追加できますか?MySQLは次のようにこれを行うことができます:
INSERT INTO x (a,b)
VALUES
('1', 'one'),
('2', 'two'),
('3', 'three')
しかし、Joomla自身の関数は単一のクエリで同じことを達成できますか?現在、各行(同じテーブル)を別々のクエリに挿入するループを実行しています。一度に大量の行を処理する場合は、お勧めできません。
モデルでは、次のことができます。
$db = $this->getDBO();
$query = "
INSERT INTO x (a,b)
VALUES
('1', 'one'),
('2', 'two'),
('3', 'three')
";
$db->setQuery($query);
$db->query();
モデルの外部にいる場合は、次のようにDBオブジェクトを取得する必要があります。
$db = JFactory::getDBO();
次を使用できます。
$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();
また、$db->insertId()
autoinc idがある場合は、それを返すことができます。
配列に値がある場合は、これを試してください。
$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();
これを試して:
$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();
「値」メソッドの説明
INSERTINTOステートメントの値として使用されるタプルまたはタプルの配列を追加します。
使用法:
$ query-> values( '1,2,3')-> values( '4,5,6');
$ query-> values(array( '1,2,3'、 '4,5,6'));
あなたは必要ありません$db = $this->getDBO();
これを使用するだけです:-
$query = "
INSERT INTO x (a,b)
VALUES
('1', 'one'),
('2', 'two'),
('3', 'three')
";
$this->_db->setQuery($query);
$this->_db->query();
Joomla!の最新バージョンでは、次のように独自のDBクラスを使用できます。必要に応じて、「quoteName()」および「quote()」関数を使用することを忘れないでください。
$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();