php - CakePHP:值未保存到 Db

标签 php mysql cakephp

我正在尝试使用 Andras Kende 的 CakePHP Shopping Cart在我自己的应用程序中,我无法理解为什么以下更改不起作用。

在订单流程结束时,在 paypal 和一切之后,当用户即将完成交易时,我想,如果用户是成员(member)/已登录,请使用 $this->Auth ->user('id') 以获取经过身份验证的 ID 并将其附加到即将完成的订单。对于我剩下的生命,我无法让它发挥作用。这就是我正在做的:

我有以下类(class):

    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)

到目前为止一切都很好。但是,当我检查我的数据库时,user_id 字段为 NULL。 18 未保存为添加到数组中。我做了很多事情,我看不出我做错了什么。请帮忙!

我的 orders 表结构如下所示:

enter image description here

其中一个订单条目如下所示:

enter image description here

我的想法用完了,我不知道该怎么办......

最佳答案

经过更多挖掘,我决定将 Db 字段更改为 user 而不是 user_id 并且成功了。为什么不使用 user_id。我的用户模型 $hasMany = array('Order'=>array('foreignKey' => 'user'))。使用 user_id 是标准的。我只是不明白为什么它不允许它。到目前为止,修复工作正常!

关于php - CakePHP:值未保存到 Db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14618159/

相关文章:

php - CakePHP : Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 52 bytes)

php - 当我使用 $.Ajax-Post 加载更多数据时,缓存无法处理 JS 文件

java - 帮助为学术项目选择网络应用程序框架

mysql - 触发器在 mysql 中的同一个表中复制行以获取类时间表

Mysql 2表连接限制两个表返回结果

php - 使用 Point 类型的 PHPUnit/CakePHP Fixtures

authentication - CakePHP 3.2 : Prevent authError showing when user is not logged in

javascript - 通过 ajax 调用更新选择字段时未选择 Select2

php - 根据 WordPress 中的用户选择应用主题?

php - 在 MySQL 中以特定方式透视表