Automattic\WooCommerce\Database\Migrations
MetaToMetaTableMigrator::generate_delete_sql_for_batch
Generate delete SQL for given batch.
Метод класса: MetaToMetaTableMigrator{}
Хуков нет.
Возвращает
Строку.
Использование
// private - только в коде основоного (родительского) класса $result = $this->generate_delete_sql_for_batch( $batch ): string;
- $batch(массив) (обязательный)
- List of data to generate delete SQL for. Should be in same format as output of
$this->fetch_data_for_migration_for_ids.
Список изменений
| С версии 10.4.0 | Введена. |
Код MetaToMetaTableMigrator::generate_delete_sql_for_batch() MetaToMetaTableMigrator::generate delete sql for batch WC 10.5.0
private function generate_delete_sql_for_batch( array $batch ): string {
global $wpdb;
$table = $this->schema_config['destination']['meta']['table_name'];
$meta_id_column = $this->schema_config['destination']['meta']['meta_id_column'];
$entity_id_column = $this->schema_config['destination']['meta']['entity_id_column'];
$entity_id_placeholder = MigrationHelper::get_wpdb_placeholder_for_type( $this->schema_config['destination']['meta']['entity_id_type'] );
$clauses = array();
foreach ( $batch as $entity_id => $metas ) {
$meta_ids = array_column(
array_reduce( $metas, 'array_merge', array() ),
$meta_id_column
);
if ( ! $meta_ids ) {
continue;
}
$meta_id_placeholders = implode( ',', array_fill( 0, count( $meta_ids ), '%d' ) );
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber
$clauses[] = $wpdb->prepare(
"( %i = {$entity_id_placeholder} AND %i IN ({$meta_id_placeholders}) )",
$entity_id_column,
$entity_id,
$meta_id_column,
...$meta_ids
);
// phpcs:enable
}
if ( ! $clauses ) {
return '';
}
$clauses_sql = implode( ' OR ', $clauses );
return "DELETE FROM {$table} WHERE {$clauses_sql}";
}