Yoast\WP\Lib

ORM::build_insert_many()protectedYoast 1.0

Builds a bulk INSERT query.

Метод класса: ORM{}

Хуков нет.

Возвращает

Строку. The insert query.

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->build_insert_many( $models, $dirty_column_names );
$models(массив) (обязательный)
Array of model instances to be inserted.
$dirty_column_names(массив) (обязательный)
Array of dirty fields to be used in INSERT.

Код ORM::build_insert_many() Yoast 22.4

protected function build_insert_many( $models, $dirty_column_names ) {
	$example_model      = $models[0];
	$total_placeholders = '';

	$query      = [];
	$query[]    = 'INSERT INTO';
	$query[]    = $this->quote_identifier( $example_model->orm->table_name );
	$field_list = \array_map( [ $this, 'quote_identifier' ], $dirty_column_names );
	$query[]    = '(' . \implode( ', ', $field_list ) . ')';
	$query[]    = 'VALUES';

	// We assign placeholders per model for dirty fields that have values and NULL for dirty fields that don't.
	foreach ( $models as $model ) {
		$placeholder = [];
		foreach ( $dirty_column_names as $dirty_field ) {
			$placeholder[] = ( $model->orm->dirty_fields[ $dirty_field ] === null ) ? 'NULL' : '%s';
		}
		$placeholders        = \implode( ', ', $placeholder );
		$total_placeholders .= "({$placeholders}),";
	}

	$query[] = \rtrim( $total_placeholders, ',' );
	return \implode( ' ', $query );
}