Automattic\WooCommerce\Database\Migrations\CustomOrderTable
CLIRunner::diff
Displays differences for an order between the HPOS and post datastore.
OPTIONS
- <order_id>
- The ID of the order.
- [--format=<format>]
- Render output in a particular format.
--- default: table options:
- table
- csv
- json
- yaml
EXAMPLES
# Find differences between datastores for order 123. $ wp wc hpos diff 123
# Find differences for order 123 and display as CSV. $ wp wc hpos diff 123 --format=csv
Method of the class: CLIRunner{}
No Hooks.
Returns
null. Nothing (null).
Usage
$CLIRunner = new CLIRunner(); $CLIRunner->diff( $args, $assoc_args );
- $args(array)
- Positional arguments passed to the command.
Default: array() - $assoc_args(array)
- Associative arguments (options) passed to the command.
Default: array()
Changelog
| Since 8.6.0 | Introduced. |
CLIRunner::diff() CLIRunner::diff code WC 10.4.3
public function diff( array $args = array(), array $assoc_args = array() ) {
$id = absint( $args[0] );
try {
$diff = wc_get_container()->get( LegacyDataHandler::class )->get_diff_for_order( $id );
} catch ( \Exception $e ) {
// translators: %1$d is an order ID, %2$s is an error message.
WP_CLI::error( sprintf( __( 'An error occurred while computing a diff for order %1$d: %2$s', 'woocommerce' ), $id, $e->getMessage() ) );
}
if ( ! $diff ) {
WP_CLI::success( __( 'No differences found.', 'woocommerce' ) );
return;
}
// Format the diff array.
$diff = array_map(
function ( $key, $hpos_value, $cpt_value ) {
// Format for dates.
$hpos_value = is_a( $hpos_value, \WC_DateTime::class ) ? $hpos_value->format( DATE_ATOM ) : $hpos_value;
$cpt_value = is_a( $cpt_value, \WC_DateTime::class ) ? $cpt_value->format( DATE_ATOM ) : $cpt_value;
// Format for NULL.
$hpos_value = is_null( $hpos_value ) ? '' : $hpos_value;
$cpt_value = is_null( $cpt_value ) ? '' : $cpt_value;
return array(
'property' => $key,
'hpos' => $hpos_value,
'post' => $cpt_value,
);
},
array_keys( $diff ),
array_column( $diff, 0 ),
array_column( $diff, 1 ),
);
WP_CLI::warning(
// translators: %d is an order ID.
sprintf( __( 'Differences found for order %d:', 'woocommerce' ), $id )
);
WP_CLI\Utils\format_items(
$assoc_args['format'] ?? 'table',
$diff,
array( 'property', 'hpos', 'post' )
);
}