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