-1

誇らしげなct_idとplan_idがすでに同じ行に存在する場合はテーブルに新しいレコードを追加したいのですが、そうでない場合はエラーが発生し、レコードが保存されます。私は次のコード行を書きましたが、成功しませんでした。何か助けがあれば、ありがとう。私はcakephpでそれをやっています

    function admin_product_plan_add(){

           $exists    =    $this->ProductPlan->find('all');
           $this->set('exists',$exists);
           foreach ($exists as $exists){
           $plan_id = $exists['ProductPlan']['plan_id'];
           $product_id = $exists['ProductPlan']['product_id'];


           }

     $conditions = array('ProductPlan.product_id' => $plan_id,   'ProductPlan.plan_id' => $product_id);
     $data = $this->ProductPlan->find('all' , array('conditions'=>$conditions));
    if (isset($data) && !empty($data))
    {        
        echo '<p>User have already add this product plan!</p>';
    }else{
        if ($this->ProductPlan->save($this->data)){

            $this->Session->setFlash('You have successfully add the product plan');  
            $this->redirect(array('controller' => 'productplans','action' => 'admin_product_plan_list'));

        }


    }

}
4

2 に答える 2

4

hasAny()を使用する

何かのようなもの:

public function admin_product_plan_add(){
    if($this->ProductPlan->hasAny(array("product_id" => $this->data['ProductPlan']['product_id'],'plan_id' => $this->data['ProductPlan']['plan_id']))){
        // USER ALREADY HAVE THIS PRODUCTPLAN
    } else {
        //CREATE NEW PRODUCTPLAN
    }
}

またはそのようなもの。

お役に立てれば

于 2013-02-12T09:46:40.513 に答える
0

1つの解決策は、これら2つの行にuniqインデックスを使用することです。したがって、誰かがこれら2つの行に同じデータを含む別の行を追加しようとすると、mysqlはエラーをスローし、データは挿入されません。

于 2013-02-12T09:47:32.907 に答える