0

orders_idOrdersデータベースのテーブルに自動挿入する必要があります。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);

ユーザーが配送先住所フォームの入力を完了した後に、ORDERS テーブルに入力するコードを挿入しました。

わかりました、次のように ORDERS モデルでリレーションを使用しました:

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'),
        );
    }
4

2 に答える 2

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 check に置き換えます。エコー $address->addressOrders->orders_id; 等

モデル「OrdersTemp」の変更は

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

使用するテーブル名のような基本的なエラーがありました 1. orders_temp とテーブル名は「orders」です 2. テーブル構造に NOT NULL を設定したため、NULL を挿入しないでください。3. テーブルに挿入する値がなかったため、オーダー テーブル b で値を取得できませんでした。

これが役に立つことを願っています

于 2012-12-08T11:01:33.857 に答える
0

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

于 2012-12-08T06:38:11.983 に答える