2012-12-08 33 views
0

我需要自動將下一個orders_id插入到數據庫中的Orders表中。 orders_id不是主鍵,它不會自動遞增插入編碼查詢

我需要查詢數據庫,找到最後(最高)的id值,遞增1,然後將它插入到數據庫的Orders表中。其實,我有一個運送行爲,將提供訂單運送地址。因此,只要用戶填寫地址表單並轉到付款頁面,我想要同時填寫我的Orders表格max(orders_id)+1

我建立了Address表和Orders表之間的關係,但我的orders表沒有被填充。請詳細介紹我正確的代碼,以便在Yii的控制器中實現它。

我對航運動作控制器是這樣的:

public function actionCheckout_shipping() 
    { 
      $address_id = Yii::app()->session->get('address_id'); 
      if(!empty($address_id)) 
       $address = Address::model()->findByPk($address_id); 
      else 
       $address = new Address; 

      $orders=new Orders; 
      $orders_id = Yii::app()->db->createCommand("SELECT MAX('orders_id') FROM orders_temp")->queryScalar(); 
      $orders->orders_id=$orders_id+1; 
      $orders->customer_id = 1; 
      $orders->billing_address_id = Address::model()->address_id; 
      $orders->shipping_address_id = Address::model()->address_id; 
      $orders->payment_details_id = 1; 
      $orders->order_date = date('d-m-y'); 
      $orders->shipping_amount= NULL; 
      $orders->total_amount = 100; 
      $orders->created_date = date('d-m-y'); 
      $orders->save(); 

      $this->render('checkout_shipping', array('address'=>$address,'selected_address'=>$selected_address),false,true); 

我已經插入的代碼的用戶完成送貨地址形式的填充後訂單表來填充它。

好吧,我已經使用了關係,我的訂單模式是這樣的:

public function relations() 
    { 
     // NOTE: you may need to adjust the relation name and the related 
     // class name for the relations automatically generated below. 
     return array(
      'billingAddress' => array(self::BELONGS_TO, 'Address', 'billing_address_id'), 
      'shippingAddress' => array(self::BELONGS_TO, 'Address', 'shipping_address_id'), 
     ); 
    } 

回答

0

insert into orders (orders_id) values (select max(orders_id)+1 from orders);

+0

好thaks ......但我知道這樣做MySQL的方式......我想在誼控制器實現 – nerd

+0

對不起,你的問題是模糊的,當我回答。你的編輯使它好多了。 – Lighthart

1

把你的控制器。

//$address_id = Yii::app()->session->get('address_id');// Temporary I set 
$address_id = 1; // Remove this 

     if(!empty($address_id)) 
    { 
      $address = Address::model()->findByPk($address_id); 
    } 
     else 
    { 
     echo "error address id should be there";     
    } 

    $order_id = Yii::app()->db->createCommand("SELECT MAX(orders_id) FROM orders")->queryScalar(); 
$order_id = ($order_id)?($order_id+1):1; 
     $orders=new OrdersTemp; 
$orders->orders_id = $order_id; 
$orders->customer_id = 1; 
    $orders->billing_address_id = $address_id; 
    $orders->shipping_address_id = $address_id; 
    $orders->payment_details_id = 1; 
    $orders->order_date = date('Y-m-d G:i:s'); 
    $orders->shipping_amount= '44'; 
    $orders->total_amount = '10'; 
$orders->shipping_address_id = 1;   
    $orders->created_date = date('Y-m-d G:i:s'); 
$orders->modified_date = date('Y-m-d G:i:s'); 
    $orders->save(); 
echo $address->address_id; 
echo "<br />"; 
echo $address->addressOrders->orders_id; 
echo "<br />";    
echo $address->addressOrders->total_amount; 
    $this->render('checkout_shipping', array('address'=>$address),false,true); 

替換該函數到CartController n檢查在視圖文件 回波等回聲$地址 - > addressOrders-> orders_id;等

變化模型「OrdersTemp」是

public function tableName() 
{ 
    return 'orders'; 
} 

基本的錯誤在那裏如​​表名稱使用 1. orders_temp和表名是「訂單」 2.請不要插入NULL作爲你在表結構中設置NOT NULL。 3.您沒有在表b中獲取值,因爲沒有值插入到表中。

希望對您有所幫助

+0

我不能清楚地指出你的觀點。請解釋一下關係數組,以及在哪裏我把這些代碼sholud ...我們需要做模型或控制器中的SQL的東西嗎? – nerd

+0

你能分享你的控制器代碼嗎?所以我可以在這裏解釋你。或者我可以更正您的代碼。還讓我知道你的地址模型關係數組的訂單。 –

+0

我已經分享我的controller.Please儘可能糾正它。謝謝 – nerd