Automattic\WooCommerce\Internal\DataStores\Orders

OrdersTableSearchQuery::maybe_get_join_for_customersprivateWC 10.1.0

Returns a prepared JOIN fragment for customers/addresses when FTS is enabled.

Method of the class: OrdersTableSearchQuery{}

No Hooks.

Returns

String. JOIN clause or empty string if FTS disabled.

Usage

// private - for code of main (parent) class only
$result = $this->maybe_get_join_for_customers(): string;

Changelog

Since 10.1.0 Introduced.

OrdersTableSearchQuery::maybe_get_join_for_customers() code WC 10.3.6

private function maybe_get_join_for_customers(): string {
	global $wpdb;

	$db_util       = wc_get_container()->get( DatabaseUtil::class );
	$address_table = $this->query->get_table_name( 'addresses' );
	$orders_table  = $this->query->get_table_name( 'orders' );

	$fts_enabled = get_option( CustomOrdersTableController::HPOS_FTS_INDEX_OPTION ) === 'yes'
		&& get_option( CustomOrdersTableController::HPOS_FTS_ADDRESS_INDEX_CREATED_OPTION ) === 'yes';

	if ( ! $fts_enabled ) {
		return '';
	}

	$search_pattern = $wpdb->esc_like( $db_util->sanitise_boolean_fts_search_term( $this->search_term ) );

	// Support for phone was added in 9.4.
	$maybe_phone_field = '';
	if ( version_compare( get_option( 'woocommerce_db_version' ), '9.4.0', '>=' ) ) {
		$maybe_phone_field = ', phone';
	}

	// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
	return $wpdb->prepare(
		"LEFT JOIN (
			SELECT DISTINCT order_id
			FROM $address_table
			WHERE MATCH (
				first_name, last_name, company,
				address_1,  address_2, city,  state,
				postcode,   country,   email  $maybe_phone_field
			) AGAINST ( %s IN BOOLEAN MODE )
		) AS " . self::CUSTOMERS_JOIN_ALIAS . ' ON ' . self::CUSTOMERS_JOIN_ALIAS . ".order_id = $orders_table.id",
		$search_pattern
	);
	// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	// phpcs:enable WordPress.DB.PreparedSQL.NotPrepared
}