Automattic\WooCommerce\Internal\DataStores\Orders
OrdersTableSearchQuery::maybe_get_join_for_customers
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() 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
}