Iamはこのようにして動作しています。APIを挿入すると重複キーでデータベースが更新されます
//リポジトリ
public function InsertListaccts($Table = '<listaccts>', $Data)
{
$this->getEntityManager()->getConnection()->insert($Table, $Data);
}
//コントローラ
public function ApiAction()
{
$Cpanel = new \Gufy\CpanelPhp\Cpanel;
$Cpanel->setAuthType('hash');
$Cpanel->setHost($this->container->getParameter('api_host'));
$Cpanel->setAuthorization($this->container->getParameter('api_user'), $this->container->getParameter('api_hash'));
$Cpanel->setTimeout(50);
$Arguments = array();
$QueryCpanel= $Cpanel->__call('listaccts', $Arguments);
$em = $this->getDoctrine()->getEntityManager();
$json = json_decode($QueryCpanel, true);
foreach ($json ['acct'] as $List) {
$Data['Domain'] =$List ['domain'];
$Data['IP'] = $List ['ip'];
$Data['UserName'] = $List ['user'];
$Data['Email'] = $List ['email'];
$Data['StartDate'] = $List ['startdate'];
$Data['DiskPartition'] = $List ['partition'];
$Data['Quota'] = $List ['disklimit'];
$Data['DiskSpaceUsed'] = $List ['diskused'];
$Data['Package'] = $List ['plan'];
$Data['Theme'] = $List ['theme'];
$Data['Owner'] = $List ['owner'];
$Data['UnixStartDate'] = $List ['unix_startdate'];
$em->getRepository('AppBundle:Listaccts')
->InsertListaccts('listaccts', $Data);
}
IamのデータベースにAPIからデータを挿入しようとしているが、問題がevrytimeである私は、クエリ実行する場合には、インサートすべてのAPI値を保つI重複する値を取得します。 現時点で私はUserNameの一意の値を持っています。同じUserNameがすでにデータベースに存在する場合、それを更新したいと思います。 このクエリは可能ですか? $ this-> getEntityManager() - > getConnection() - > insert($ Table、$ Data);
私はこのようなことをしようとしていましたが、インサートパートが動作しています。このクエリを機能させるにはどうすればよいですか?これを行うにはより良い方法がありますか?
public function InsertListaccts($Table = '<listaccts>', $Data)
{
// $this->getEntityManager()->getConnection()->insert($Table, $Data);
$Sql="INSERT INTO $Table(`ListacctsID`,`Domain`, `IP`, `UserName`,
`Email`, `StartDate`, `DiskPartition`, `Quota`, `DiskSpaceUsed`, `Package`,
`Theme`, `Owner`, `UnixStartdate`) VALUES
('{$Data['Domain']}', '{$Data['IP']}', '{$Data['UserName']}', '{$Data['Email']}', '{$Data['StartDate']}', '{$Data['DiskPartition']}', '{$Data['Quota']}', '{$Data['DiskSpaceUsed']}',
'{$Data['Package']}', '{$Data['Theme']}', '{$Data['Owner']}', '{$Data['UnixStartDate']}')
ON DUPLICATE KEY UPDATE DOMAIN =VALUES(DOMAIN),IP=VALUES(IP),UserName=VALUES(UserName),Email=VALUES(Email),StartDate=VALUES(StartDate),DiskPartition=VALUES(DiskPartition),Quota=VALUES(Quota)
,DiskSpaceUsed=VALUES(DiskSpaceUsed),Package=VALUES(Package),Theme=VALUES(Theme),Owner=VALUES(Owner),UnixStartdate=VALUES(UnixStartdate)
";
$Stm = $this->getEntityManager()->getConnection()->prepare($Sql);
$Stm->execute();
// return $Data;
}
コントローラでは何も変更しないでください。
DUPLICATE KEY UPDATEが機能するためには、一意または主キーが必要です。 //結果ページをリフレッシュして再度データを送信する(そして挿入する)という問題を回避したい場合は、POST/Redirect/GETパターンを実装します。 – CBroe
テーブルにプライマリキーがあります。 APIからのユニークな値はありません。私はその質問を働かせたい。 – user2268276
次に、UserNameの一意の値を持つ瞬間に、重複キー更新... – CBroe