使用方法:
JFactory::getDbo()->insertObject('#__card_bonus', $object);
重复密钥更新?
答案 0 :(得分:2)
<?php
$jarticle = new stdClass();
$jarticle->id = 1544;
$jarticle->title = 'New article';
$jarticle->alias = JFilterOutput::stringURLSafe($jarticle->title);
$jarticle->introtext = '<p>re</p>';
$jarticle->state = 1;
$jarticle->catid = 13;
$jarticle->created_by = 111;
$jarticle->access = 1;
$jarticle->language = '*';
$db = JFactory::getDbo();
try {
$query = $db->getQuery(true);
$result = JFactory::getDbo()->insertObject('#__content', $jarticle);
}
catch (Exception $e){
$result = JFactory::getDbo()->updateObject('#__content', $jarticle, 'id');
}
我使用这种方法 - 并不完全满意,但是......
或非对象方法:
$query = $db->getQuery(true);
$columns = array('username', 'password');
$values = array($db->quote($username), $db->quote($password));
$query
->insert($db->quoteName('#__db_name'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
$query .= ' ON DUPLICATE KEY UPDATE ' . $db->quoteName('password') . ' = ' . $db->quote($password);
$db->setQuery($query);
答案 1 :(得分:2)
您有几个选择:
1)检查实体ID。这是我的首选选项,因为它只使用单个查询,可以重用任何对象,并且与数据库无关 - 这意味着它可以在您选择的任何DBMS上运行,而其他两个选项是MySQL独有的。
if (isset($object->id)) {
$db->updateObject('#__card_bonus', $object);
}
else {
$db->insertObject('#__card_bonus', $object, 'id');
}
我经常使用save(stdClass $object)
方法创建一个抽象模型来执行此检查,因此我不必复制它。
2)使用MySQL ON DUPLICATE KEY UPDATE
语法编写自己的查询,这是SQL标准的专有扩展,您已经证明了这一点。
3)使用MySQL专有的REPLACE INTO
扩展名编写您自己的查询。
答案 2 :(得分:1)
JFactory :: getDbo() - &gt; insertObject(&#39; #__ card_bonus&#39;,$ object, $ keyName );
主键的名称。如果提供,则更新对象属性。 Joomla doc ...