在插入新数据之前删除表数据

时间:2014-08-18 02:07:22

标签: php mysql arrays foreach phalcon

我有这两个表,表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.'));   
                }
            }
        }

2 个答案:

答案 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);