我有这两个表,表A和表B.在更新表B之前,我想在插入新数据之前删除它的数据。
我有这个查询,它将删除该表中的数据,并在成功删除旧记录后插入一个新数据。它正在插入值,但它并没有删除旧值,因此最终复制了之前已插入的一些新ID。我用这段代码试了一下:
public function editDiscount(){
foreach ($this->searchFields as $field => $value) :
if($field == 'KEY'){
$key = $value;
} else if($field == 'NAME'){
$discountName = $value;
} else if($field == 'CODE'){
$discountCode = $value;
} else if($field == 'DESC'){
$discountDesc = $value;
}else if($field == 'TYPE'){
$discountType = $value;
}else if($field == 'TRANS'){
$discountTransaction = $value;
}else if($field == 'EXPTYPE'){
$expiration = $value;
}else if($field == 'START'){
$expStartDate = $value;
}else if($field == 'END'){
$expEndDate = $value;
}else if($field == 'VALUE'){
$discountValue = $value;
}else if($field == 'PRODKEY'){
$productId= $value;
}
endforeach;
$discount = VlDiscount::query()
->andWhere("autokey =?1")
->andWhere("app_id =?2")
->bind(array(1=>$key,2=>$this->session->get('appId')))
->execute();
if($discount->count() != 0){
$discountUpdate = VlDiscount::findFirst($key);
$discountUpdate->discountName = $discountName;
$discountUpdate->discountCode = $discountCode;
$discountUpdate->discountDesc = $discountDesc;
$discountUpdate->discountType = $discountType;
$discountUpdate->discountTransaction = $discountTransaction;
$discountUpdate->expiration = $expiration;
$discountUpdate->expStartDate = $expStartDate;
$discountUpdate->expEndDate = $expEndDate;
$discountUpdate->discountValue = $discountValue;
if($discountUpdate->update() == false){
$devMessage = array();
foreach ($discountUpdate->getMessages() as $key){
$devMessage[] = $key->getMessage();
}
return $this->respond(array(
'userMessage' => 'Failed',
'devMessage' => $devMessage,
'more' => 'Failed to update. One or more fields failed on validation.'));
}else if ($discountTransaction == 'p'){
foreach ($this->searchFields as $field => $value) :
if($field == 'PRODKEY'){
$productId = $value;
}
endforeach;
$exs = explode('|',$productId);
$deleteErrors = 0;
foreach ($exs as $xx) {
$deleteproductDiscount = VlDiscountProduct::query()
->andWhere("discountId =?1")
->andWhere("app_id =?2")
->bind(array(1=>(int)$xx,2=>$this->session->get('appId')))
->execute();
foreach($productdiscountDelete as $cat){
$productsDelete = VlDiscountProduct::findFirst($cat->$discountUpdate->autokey);
if ($deleteproductDiscount != false) {
if ($productsDelete->delete() == false) {
$deleteErrors++;
$devMessage = array();
foreach ($deleteproductDiscount->getMessages() as $key){
$devMessage[] = $key->getMessage();
}
}
}
}
unset($deleteproductDiscount);
}
if($deleteError == 0){
$exp = explode('|',$productId);
foreach ($exp as $item){
$productDiscount = new VlDiscountProduct();
$productDiscount->discountId = $discountUpdate->autokey;
$productDiscount->productId = $item;
$productDiscount->app_id = $this->session->get('appId');
if($productDiscount->create() == false){
$devMessage = array();
foreach ($productDiscount->getMessages() as $key){
$devMessage[] = $key->getMessage();
}
return $this->respond(array(
'userMessage' => 'Failed',
'devMessage' => $devMessage,
'more' => 'Failed to create. One or more fields failed on validation.'
));
}
}
return $this->respond(array('userMessage' => 'OK'));
}else{
return $this->respond(array(
'userMessage' => 'Failed',
'devMessage' => $devMessage,
'more' => 'Failed to delete. One or more fields produced an error.'
));
}
return $this->respond(array(
'userMessage' => 'Failed',
'devMessage' => 'Cannot find user information',
'more' => 'Failed to update. One or more fields failed on validation.'));
}
}
}
答案 0 :(得分:1)
您正在检查if($deleteError == 0){
而不是if($deleteErrors == 0){
。
<强>更新强>
这整个foreach声明都已关闭。
foreach($productdiscountDelete as $cat){
$productsDelete = VlDiscountProduct::findFirst($cat->$discountUpdate->autokey);
if ($deleteproductDiscount != false) {
if ($productsDelete->delete() == false) {
$deleteErrors++;
$devMessage = array();
foreach ($deleteproductDiscount->getMessages() as $key){
$devMessage[] = $key->getMessage();
}
}
}
}
你永远不会定义$productdiscountDelete
,因此它永远不会进入这个foreach循环。
答案 1 :(得分:0)
我也改变了
$productsDelete = VlDiscountProduct::findFirst($cat->$discountUpdate->autokey);
到
$productsDelete = VlDiscountProduct::findFirst($cat->autokey);