Automattic\WooCommerce\Internal\Admin\Reports

HposLegacyOrderReportQueryBuilder::build_where_meta_joins │ private │ WC 1.0

Build the JOINs required to satisfy a where_meta predicate.

Method of the class: HposLegacyOrderReportQueryBuilder{}

No Hooks.

Returns

array<string,string>. JOINs keyed by alias.

Usage

// private - for code of main (parent) class only
$result = $this->build_where_meta_joins( $value );
$value(array) (required)
A where_meta row.

HposLegacyOrderReportQueryBuilder::build_where_meta_joins() code WC 11.1.2

private function build_where_meta_joins( $value ) {
	$type      = $value['type'] ?? '';
	$join_type = $value['join_type'] ?? 'INNER';
	$meta_key  = $value['meta_key'];
	$key       = sanitize_key( is_array( $meta_key ) ? $meta_key[0] . '_array' : $meta_key );

	if ( 'order_item_meta' === $type ) {
		global $wpdb;
		$alias = "order_item_meta_{$key}";
		return array(
			'order_items' => "{$join_type} JOIN {$wpdb->prefix}woocommerce_order_items AS order_items ON orders.id = order_items.order_id",
			$alias        => "{$join_type} JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS {$alias} ON order_items.order_item_id = {$alias}.order_item_id",
		);
	}

	$schema = $this->get_report_schema();
	if ( ! is_array( $meta_key ) && isset( $schema['where_meta_column'][ $meta_key ] ) ) {
		return array();
	}
	if ( ! is_array( $meta_key ) && isset( $schema['address_column'][ $meta_key ] ) ) {
		return $this->build_address_join( $schema['address_column'][ $meta_key ][0] );
	}

	$alias = "meta_{$key}";
	return array( $alias => "{$join_type} JOIN " . OrderUtil::get_table_for_order_meta() . " AS {$alias} ON orders.id = {$alias}.order_id" );
}