2

Andras Kende のCakePHP Shopping Cartを自分のアプリケーションで使用しようとしていますが、次の変更が機能しない理由がわかりません。

注文プロセスの最後に、ペイパルとすべての後、ユーザーがトランザクションを確定しようとしているときに、ユーザーがメンバー/ログインしている場合は、$this->Auth->user('id')認証された ID を取得して注文に添付したいと思います。それが確定しようとしています。私に残された人生のために、私はそれを働かせることができません。これは私がやっていることです:

私は次のクラスを持っています:

    public function review() {
    $shop = $this->Session->read('Shop');       
    if(empty($shop)) {
        $this->redirect('/shop/cart');
    }
    if ($this->request->is('post')) {
        $this->loadModel('Order');
        $this->Order->set($this->request->data);
        if($this->Order->validates()) {
            $order = $shop;
            $order['Order']['user_id'] = (int)$this->Auth->user('id');
            $order['Order']['status'] = 1;

            var_dump($order);

            if($shop['Order']['order_type'] == 'paypal') {
                $paypal = $this->Paypal->ConfirmPayment($order['Order']['total']);
                $ack = strtoupper($paypal['ACK']);
                if($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') {
                    $order['Order']['status'] = 2;
                }
                $order['Order']['authorization'] = $paypal['ACK'];
            }
            $save = $this->Order->saveAll($order, array('validate' => 'first'));
            if($save) {
                $this->set(compact('shop'));
                App::uses('CakeEmail', 'Network/Email');
                $email = new CakeEmail();
                $email->from($this->requestAction('/settings/getSettingValue/ADMIN_EMAIL'))
                        ->cc($this->requestAction('/settings/getSettingValue/ADMIN_EMAIL'))
                        ->to($shop['Order']['email'])
                        ->subject('Shop Order')
                        ->emailFormat('text')
                        ->viewVars(array('shop' => $shop))
                        ->send();
                $this->redirect(array('action' => 'success'));
            } else {
                $errors = $this->Order->invalidFields();
                $this->set(compact('errors'));
            }
        }           
    }
    if(($shop['Order']['order_type'] == 'paypal') && !empty($shop['Paypal']['Details'])) {
        $shop['Order']['first_name'] = $shop['Paypal']['Details']['FIRSTNAME'];
        $shop['Order']['last_name'] = $shop['Paypal']['Details']['LASTNAME'];
        $shop['Order']['email'] = $shop['Paypal']['Details']['EMAIL'];
        $shop['Order']['phone'] = '888-888-8888';
        $shop['Order']['billing_address'] = $shop['Paypal']['Details']['SHIPTOSTREET'];
        $shop['Order']['billing_address2'] = '';
        $shop['Order']['billing_city'] = $shop['Paypal']['Details']['SHIPTOCITY'];
        $shop['Order']['billing_zip'] = $shop['Paypal']['Details']['SHIPTOZIP'];
        $shop['Order']['billing_state'] = $shop['Paypal']['Details']['SHIPTOSTATE'];
        $shop['Order']['billing_country'] = $shop['Paypal']['Details']['SHIPTOCOUNTRYNAME'];
        $shop['Order']['shipping_address'] = $shop['Paypal']['Details']['SHIPTOSTREET'];
        $shop['Order']['shipping_address2'] = '';
        $shop['Order']['shipping_city'] = $shop['Paypal']['Details']['SHIPTOCITY'];
        $shop['Order']['shipping_zip'] = $shop['Paypal']['Details']['SHIPTOZIP'];
        $shop['Order']['shipping_state'] = $shop['Paypal']['Details']['SHIPTOSTATE'];
        $shop['Order']['shipping_country'] = $shop['Paypal']['Details']['SHIPTOCOUNTRYNAME'];
        $shop['Order']['order_type'] = 'paypal';
        $this->Session->write('Shop.Order', $shop['Order']);
    }
    $this->set(compact('shop'));
}

11 行目で、次のようにしてログイン ユーザー ID を$order配列に追加します。

$order['Order']['user_id'] = (int)$this->Auth->user('id');

この時点で を実行するvar_dump($order)と、現在ログインしているユーザー (この場合は ) のユーザー ID が表示されます18。だから私はそれを正しく割り当てているという事実を知っています。

 ["user_id"]=> int(18)

ここまでは大丈夫です。ただし、DB を確認すると、user_idフィールドは NULL です。18配列に追加されたとして保存されていません。私は複数のことをしましたが、何が間違っているのかわかりません。助けてください!

ordersのテーブル構造は次のようになります。

ここに画像の説明を入力

注文エントリの 1 つが次のようになります。

ここに画像の説明を入力

アイデアが尽きて、どうしたらいいのかわからない……。

4

1 に答える 1

0

さらに掘り下げた後、Dbフィールドをuser代わりにに変更することにしましたがuser_id、うまくいきました。なぜそれはかかりませんuser_id。私のユーザーモデル$hasMany = array('Order'=>array('foreignKey' => 'user'))。使用するのは標準user_idです。なぜそれが許可されていないのか理解できません。これまでのところ、修正は機能しています!

于 2013-04-26T19:57:29.133 に答える