How to add Orders to Razor Commerce Programmatically

May 2, 2015

Add Orders to Razor Commerce programmatically starts by using the Order object, namespace Razor\Core\Order\Order. The add() method will add an order to the database. Note that the order will initially have no OrderItems, so in practice we will normally be adding item(s) immediately after.

The Order::add() method returns the full Order object.

use Razor\Core\Order\Order;

/*
 * $customerID C5 User ID. For testing you can use 1 which is admin. 
 * $orderDate date in MySQL format e.g. 2015-03-30
 * $status string, use "cart" to put the order in the user cart
  */

 // $order = Order::add( $customerID, $orderDate, $status );

 $order = Order::add( 1, '2015-03-30', 'cart' );

Adding OrderItems

What's an Order without OrderItems? Well, it's perfectly valid to have an order without items and we have already created a fully-formed Order object. Adding OrderItems simply gives us a more practical example and we do need OrderItems to be able to do further work with the Order such as calculating an order total or adjusting that total with taxes and shipping.

The Order class we've already used to add the Order has the method addItem(). We'll use that method now in the example below.

/*
* $productID product id
 * $quantity quantity of this item to add to the order
* $priceEach price per quantity of the item, this should normally match the price of the product however it could be a sale price or discounted price
 */

// $order->addItem( $productID, $quantity, $priceEach );

$order->addItem( 1, 1, 7.5 );

How to get the Product ID?

There is a method getByPath() for the Product object which you can use as $product = \Razor\Core\Product\Product::getByPath( '/path/to/product' );.

This is a wrapper for the core Page::getByPath so it works the same way, the path must be preceded by a forward slash. It returns the full Product object and you can use $product->getCollectionID() to get the Product ID, which is also the collection ID.

How to get the product price?

To get the product price you need to load the Product which you can do with Razor\Core\Product\Product::getByID( $productID ) if you have the Product ID or Razor\Core\Product\Product::getByPath( 'path/to/product' ) if you don't.


To learn more about Razor Commerce the free eCommerce suite for Concrete5.7 visit http://razorcommerce.org and to download visit https://github.com/RazorCommerce/razor-commerce.

Recent Tutorials
How to update Add-Ons if not on the Update Add-Ons Menu item
Jul 4, 2022

How to manually download an add-on and update it when your site's core versions isn't considered compatible with the add-on version.

Generate a report with author information and form summaries in Concrete CMS.
May 9, 2022

In Concrete CMS, you can use a form to initiate contact between logged-in users and then create helpful reports. After form submissions are collected, they can be searched, sorted, and exported as a spreadsheet. This tutorial will detail how to add author information to a report using the advanced search.

How to clone and customize Atomik theme
Feb 14, 2022
By linuxoid.

How to clone and customize Atomik theme

Update jQuery to 3.5 on Concrete CMS version 8.5.x
Dec 1, 2021
By hissy.

If you have to take some time to fix your site to work with version 9 and want to update jQuery immediately, you can override it.

Add-On Developers: Get Your Add-Ons Ready for Concrete CMS 9.0
Aug 6, 2021
By andrew.

Concrete CMS 9.0 is coming! But there are some changes in version 9 that might affected your add-ons and themes. This document aims to answer questions about the most common ways that your add-ons might need to be changed, and common problems you'll run into.

Permissions for editors in a multilingual site
Jun 2, 2021
By myq.

How to set up a multilingual Concrete CMS site for groups of language-specific editors

Was this information useful?
Thank you for your feedback.