<?php if(filter_has_var(INPUT_POST, 'pay') && filter_input(INPUT_POST, 'pay') === 'Complete Payment' && isset($_SESSION['shoppingCart'])) { $path = MODX_CORE_PATH.'components/store/'; $result = $modx->addPackage('store',$path.'model/','wp_'); if (!$result) { return 'Failed to add package'; } $totalAmount = 0; foreach($_SESSION['shoppingCart'] as $cart => $product) { $totalAmount += $product['price'] * $product['quantity']; } $orderFields = array('idClient' => $_SESSION['loggedIn']['id'], 'totalAmount' => $totalAmount, 'paymentType' => 'debit card', 'date' => 'CURDATE();'); $order = $modx->newObject('Order', $orderFields); $oSave = $order->save(); $idOrder = $modx->lastInsertId(); $orderProductList = array(); foreach($_SESSION['shoppingCart'] as $cart => $product) { $orderProductList[] = array('idProduct' => $product['idProduct'], 'idOrder' => $idOrder, 'quantity' => $product['quantity']); } $opSave = true; foreach($orderProductList as $oP) { $orderProduct = $modx->newObject('OrderProduct', $oP); $opSave = $orderProduct->save(); if(!$opSave) { break; } } if ($oSave && $opSave) { unset($_SESSION['shoppingCart']); $cart = ''; $message = 'Payment completed'.$listas; return $modx->getChunk('shoppingCartTpl', array('cart' => $cart, 'message' => $message)); } else { unset($_SESSION['shoppingCart']); return 'The transaction failed'; } }
<?xml version="1.0" encoding="UTF-8"?> <model package="store" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1"> <object class="Client" table="client" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="30" phptype="string" null="false" /> <field key="password" dbtype="char" precision="8" phptype="string" null="false" /> <!-- PPPPPPPPPPPPPPPPPPPPPPPP --> <composite alias="Orders" class="Order" local="id" foreign="clientKey" cardinality="many" owner="local" /> </object> <object class="Order" table="order" extends="xPDOSimpleObject"> <field key="idClient" dbtype="int" precision="11" phptype="integer" null="false" index="index" /> <field key="totalAmount" dbtype="int" precision="11" phptype="integer" null="false" /> <field key="paymentType" dbtype="varchar" precision="10" phptype="string" null="false" /> <field key="date" dbtype="datetime" phptype="datetime" null="false" /> <index alias="fk_order" name="fk_order" primary="false" unique="false" type="BTREE" > <column key="idClient" length="" collation="A" null="false" /> </index> <!-- FFFFFFFFFFFFFFFFFFFFFFFF --> <field key="clientKey" dbtype="int" precision="100" phptype="integer" null="false" default="" /> <aggregate alias="ClientAlias" class="Client" local="clientKey" foreign="id" cardinality="one" owner="foreign" /> <!-- PPPPPPPPPPPPPPPPPPPPPPPP --> <composite alias="Ordersproducts" class="Orderproduct" local="id" foreign="orderKey" cardinality="many" owner="local" /> </object> <object class="Orderproduct" table="orderproduct" extends="xPDOObject"> <field key="idProduct" dbtype="int" precision="11" phptype="integer" null="false" index="pk" /> <field key="idOrder" dbtype="int" precision="11" phptype="integer" null="false" index="pk" /> <field key="quantity" dbtype="int" precision="11" phptype="integer" null="false" /> <index alias="PRIMARY" name="PRIMARY" primary="true" unique="true" type="BTREE" > <column key="idProduct" length="" collation="A" null="false" /> <column key="idOrder" length="" collation="A" null="false" /> </index> <index alias="fk_1_orderProduct" name="fk_1_orderProduct" primary="false" unique="false" type="BTREE" > <column key="idProduct" length="" collation="A" null="false" /> </index> <index alias="fk_2_orderProduct" name="fk_2_orderProduct" primary="false" unique="false" type="BTREE" > <column key="idOrder" length="" collation="A" null="false" /> </index> <!-- FFFFFFFFFFFFFFFFFFFFFFFF --> <field key="orderKey" dbtype="int" precision="100" phptype="integer" null="false" default="" /> <aggregate alias="OrderAlias" class="Order" local="orderKey" foreign="id" cardinality="one" owner="foreign" /> <!-- FFFFFFFFFFFFFFFFFFFFFFFF --> <field key="productKey" dbtype="int" precision="100" phptype="integer" null="false" default="" /> <aggregate alias="ProductAlias" class="Product" local="productKey" foreign="id" cardinality="one" owner="foreign" /> </object> <object class="Product" table="product" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="30" phptype="string" null="false" /> <field key="description" dbtype="varchar" precision="100" phptype="string" null="true" /> <field key="price" dbtype="int" precision="11" phptype="integer" null="false" /> <field key="stock" dbtype="int" precision="11" phptype="integer" null="false" /> <!-- PPPPPPPPPPPPPPPPPPPPPPPP --> <composite alias="Ordersproducts" class="OrderProduct" local="id" foreign="productKey" cardinality="many" owner="local" /> </object> </model>
This question has been answered by BobRay. See the first response.
$orderProduct = $modx->newObject('OrderProduct'); if ($orderProduct) { $orderProduct->set('idOrder', $idOrder); // etc. $opSave = $orderProduct->save(); } else { $modx->log(modX::LOG_LEVEL_ERROR, 'Failed to create OrderProduct'); }