首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入新数据前删除表数据

插入新数据前删除表数据
EN

Stack Overflow用户
提问于 2014-08-18 02:07:21
回答 2查看 159关注 0票数 0

我有这两个表,表A和表B。在更新表B之前,我想在插入新表之前删除它的数据。

在这个查询中,它将删除该表中的数据,并在成功删除旧记录之后插入一个新的数据。它正在插入值,但没有删除旧的值,因此它最终复制了之前已经插入的一些新id。我用这个代码试了一下:

代码语言:javascript
复制
 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.'));   
                }
            }
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-18 02:30:27

您正在检查if($deleteError == 0){而不是if($deleteErrors == 0){

更新

整条foreach语句都关闭了。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-08-20 01:33:07

我也变了

代码语言:javascript
复制
 $productsDelete = VlDiscountProduct::findFirst($cat->$discountUpdate->autokey);

代码语言:javascript
复制
$productsDelete = VlDiscountProduct::findFirst($cat->autokey);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25355474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档