Zend framework2 在Zend Framework 2中使用INSERT Ignore忽略重复项
我有一个表,其中一个字段是唯一的,并且有一些记录。我需要在不使查询失败的情况下插入一些新记录(表中可能已经存在一些记录) 在普通的MySQL中;我可以使用忽略关键字作为插入忽略…Zend framework2 在Zend Framework 2中使用INSERT Ignore忽略重复项,zend-framework2,Zend Framework2,我有一个表,其中一个字段是唯一的,并且有一些记录。我需要在不使查询失败的情况下插入一些新记录(表中可能已经存在一些记录) 在普通的MySQL中;我可以使用忽略关键字作为插入忽略… 如何在Zend Framework 2DB中指定INSERT IGNORE,如果您愿意,您仍然可以在普通MySQL中这样做 $sql=“插入…” 如果您正在使用tablegateway或定义适配器,请像这样获取适配器 如果使用\Zend\Db\Sql\Insert可以创建扩展类并重写getSqlString(…):
如何在Zend Framework 2DB中指定INSERT IGNORE,如果您愿意,您仍然可以在普通MySQL中这样做 $sql=“插入…” 如果您正在使用tablegateway或定义适配器,请像这样获取适配器
如果使用
\Zend\Db\Sql\Insert
可以创建扩展类并重写getSqlString(…)
:
\src\MyNamespace\Zend\Db\Sql\Insert.php
我正在使用这个:
use Zend\Db\Sql\Insert;
class InsertIgnore extends Insert
{
/**
* @var array Specification array
*/
protected $specifications = [
self::SPECIFICATION_INSERT => 'INSERT IGNORE INTO %1$s (%2$s) VALUES (%3$s)',
self::SPECIFICATION_SELECT => 'INSERT IGNORE INTO %1$s %2$s %3$s',
];
}
实际上
//$action = $sql->insert(); // Before
$action = new InsertIgnore($sql->getTable()); // After
$action->values($data);
谢谢@dixromos98。我目前正在使用查询方法。ZF2中是否有执行INSERT IGNORE查询的本机方法?能否修改INSERT查询的答案?因为问题是关于插入查询的;其他人查看答案会更好。我四处查看了一下,但似乎不支持插入忽略。正如我在教程中看到的,正在使用的绕过逻辑是检查主键是否存在,然后对该行执行更新。这是如果您不希望使用普通查询
//$action = $sql->insert(); // Before
$action = new InsertIgnore($sql->getTable()); // After
$action->values($data);