cakephp价格检查

时间:2011-09-13 20:14:15

标签: php cakephp

我有一个输入框矩阵,其中包含日期的价格。如果数据库中没有特定日期的价格,则输入框显示0.我有以下代码,将输入框中输入的价格保存到数据库中。它不会仅保存新价格的所有0值。

哪个好。但是我现在发现了一个问题。如果其中一个输入从数据库中显示一个值,比如$ 10,我想将它现在设置为0,那么代码就不会这样做。

只有在值超过0时才会保存。我无法进行最终检查。

储蓄的条件是 1.如果值是数字 2.如果它为0并且数据库中已有条目,则保存 3.如果数据库中没有值且大于0 4.如果它为0且数据库中没有值,则不保存

        if (isset($this->data['Rate'])){

            // for each rate
            foreach($this->data['Rate'] as $rate_id => $room){

                    // for each room type           
                    foreach($room as $room_id => $room){

                        $price_for_today = isset($room['Price'][$key]) ? $room['Price'][$key] : 0;

                        // get existing availabilities is num (get this from previous date loop)
                        $today = ''.$date.' 00:00:00';          
                        $conditions = array('Availability.date' => $today,'Availability.room_id'=>$room_id);
                        $this->Availability->contain();         
                        $result = $this->Availability->find('all',array('order'=>'Availability.room_id ASC', 'conditions'=>$conditions));
                        $avail_id = $result[0]['Availability']['id'];

                        // check prices
                        $check_prices = "SELECT * FROM prices 
                                WHERE rate_id = '".$rate_id."' AND availability_id = '".$avail_id."'";
                        $prices_result = $this->Availability->query($check_prices);

                        // if new prices > 0.00
                        if($price_for_today>0 && is_numeric($price_for_today)){
                            // better checking needed!
                            if($prices_result){
                                    $setprices = "UPDATE prices SET price = '".$price_for_today."'  
                                    WHERE rate_id = '".$rate_id."' AND availability_id = '".$avail_id."'";
                                    $update = $this->Availability->query($setprices);
                            } else {
                                    $setprices = "INSERT INTO prices (price, availability_id, rate_id) 
                                    VALUES ('".$price_for_today."', '".$avail_id."', '".$rate_id."')";
                                    $insert = $this->Availability->query($setprices);           
                            }
                        }

                        //$errors[] = $setprices;

                    } // end rooms loop

            } // end Rates loop

1 个答案:

答案 0 :(得分:1)

你的问题在

> // if new prices > 0.00
>                         if($price_for_today>0 &&
> is_numeric($price_for_today)){

这里你指定$ prices_for_today必须是> 0,所以如果你有一个价格并想今天把它设为0那么你就不会做任何事......你应该使用

if(($price_for_today>0 && is_numeric($price_for_today)) || (!empty($prices_result) && $price_for_today==0 && is_numeric($price_for_today))){

如果您更改它,它现在将输入if并进行更改。

我认为你不使用查询功能,除非非常必要。你应该创建一个价格模型(如果你还没有这样做),然后使用关联(hasMany,HasOne,HABTM)或直接在控制器中使用$ this-> loadModel('Price')加载模型。然后使用条件和字段查找'all'。这种推荐是按照预期使用蛋糕,而不是必不可少的。另外,如果你这样做,可以完成保存,更新字段,读取...留下支票和所有蛋糕。