Как в вордпресс БД заменять данные в строке
Как в WP в таблице БД заменить нужные значения в строке. Использую
$result = $wpdb->replace( $table, $arr);
где
$arr = array(
'id' => setValue($data->data[$i]->id),
'home' => setValue($data->data[$i]->number),
'book_status' => setValue($status_ru[$data->data[$i]->status]),
'rooms' => setValue($data->data[$i]->rooms_amount),
'phase' => setValue($phase_ru[$data->data[$i]->sectionName]),
'full_area' => setValue($data->data[$i]->area->area_total),
'life_area' => setValue($data->data[$i]->area->area_living),
'kitchen_area' => setValue($data->data[$i]->area->area_kitchen),
'price' => setValue($data->data[$i]->price->value),
);
В самой же строке таблицы БД всего 25 параметров из 9 приведенных. Применяю replace() и данная функция заменяет только 9 приведенных, остальные 16 параметров очищает.
Знаю, что есть еще функция update().
Но мне необходимо получить данные и если данные с таким ID есть в таблице, то обновить данные в строке в этим ID. Если такого ID нет в таблице, то добавить новую строку с этим ID. Поэтому принципу функция replace() казалось бы почти подходила.
Ответы (3 шт):
Как в WP в таблице БД заменить нужные значения
Если интересует как это сделать правильно, то
Вар1. С пом плагинов, работающий с сериализованными данными. Напр https://wordpress.org/plugins/better-search-replace/
Вар2. Скрипта https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
Вар3. wp-cli
Если же речь о написании кода в своём плагине или теме, но нужно использовать функции ВП вида*update*.
$wpdb->replace() всегда заменяет все поля таблицы. Если вы не указываете какие-то поля, то они будут очищены, что у вас и происходит.
Чтобы делать замену 9 из 25 полей, вам надо сначала выполнить get_row() с нужным id, заменить в полученном массиве 9 полей из 25, и записать полный массив из 25 элементов назад с помощью $wpdb->replace(). По-другому MySQL не работает.
Решил задачу так:
$row = $wpdb->get_row("SELECT id FROM $table WHERE id = ".$id );
if ( $row > 0 ) {
// Есть данные
$result = $wpdb->update( $table, $arr, array( 'id' => $id ) );
} else {
// нет данных
$result = $wpdb->insert( $table, $arr);
}