Массовое изменение полей пользователя

Здравствуйте!

У нас поменялась политика регистрации пользователей на сайте. Теперь username равен полю phone.
При регистрации все срабатывает верно, но есть несколько тысяч пользователей, зарегистрированных ранее, у которых username стандартный и равен полю email.

Подскажите, можно как-то массово заменить содержимое в username на содержимое из поля phone?
kudesia
02 февраля 2023, 13:48
modx.pro
363
0

Комментарии: 12

Павел Романов
02 февраля 2023, 15:09
+1
Запустите в Console скрипт (естественно, сделав предварительно бэкап базы):

foreach ($modx->getIterator('modUser') as $user) {
	$profile = $user->getOne('Profile');
	$user->set('username', $profile->get('phone'));
	$user->save();
}
    kudesia
    02 февраля 2023, 20:28
    0
    Спасибо, попробую.

    Скажите, Вы не знаете, как мне массово тоже из поля phone удалить скобки () и тире — между цифрами?
      Павел Романов
      03 февраля 2023, 10:13
      1
      0
      Так только цифры останутся:
      foreach ($modx->getIterator('modUser') as $user) {
          $profile = $user->getOne('Profile');
          $phone = preg_replace("/[^,.0-9]/", '', $profile->get('phone'));
          $user->set('username', $phone);
          $user->save();
      }
        kudesia
        03 февраля 2023, 15:17
        0
        Получилось вот так
        joxi.ru/D2PaRPWiWWb5NA

        joxi.ru/82QR3PdC44GBjA
          kudesia
          03 февраля 2023, 15:40
          0
          и вот

          joxi.ru/1A5qe74uwwPg9A

          из поля не убрались лишние

          preg_replace("/[^0-9\/+]/"
          или
          preg_replace("/[^0-9+]/"

          может надо?
            Павел Романов
            03 февраля 2023, 18:26
            0
            Не знаю, выражение работает для всех вариантов:
              kudesia
              03 февраля 2023, 18:47
              0
              Так надо убрать только скобки () и тире — между цифрами

              +7 должно остаться
              Разве не такое выражение для этого
              /[^0-9+]/
              ?
                Павел Романов
                03 февраля 2023, 18:52
                0
                //....
                $arr = array('(', ')', '-', '—', '–', ' ');
                $phone = str_replace($arr, '', $profile->get('phone'));
                //....
                  kudesia
                  03 февраля 2023, 19:33
                  0
                  <?php
                  
                  foreach ($modx->getIterator('modUser') as $user) {
                      $profile = $user->getOne('Profile');
                      $arr = array('(', ')', '-');
                      $phone = str_replace($arr, '', $profile->get('phone'));
                      $user->save();
                  }
                  отчет
                  <pre>
                  SQL time: 0,7248 s
                  SQL queries: 3780
                  PHP time: 5,8171 s
                  Total time: 6,5420 s
                  Memory: 12 MB
                  </pre>
                  результат joxi.ru/823NelZCww7KYm

                  ничего не изменилось
                    Павел Романов
                    03 февраля 2023, 19:47
                    0
                    Вы не пишете ничего в поле, потому что пропустили:
                    $user->set('username', $phone);

                    Полный код:
                    foreach ($modx->getIterator('modUser') as $user) {
                        $profile = $user->getOne('Profile');
                        $arr = array('(', ')', '-');
                        $phone = str_replace($arr, '', $profile->get('phone'));
                        $user->set('username', $phone);
                        $user->save();
                    }
              kudesia
              03 февраля 2023, 19:44
              0
              Так-то работает
              joxi.ru/5mdlpP8CJJ705m
              <?php
              $phones = array(
                 '+7(123)456-78-91'
                 );
              foreach($phones as $phone) {
                 echo preg_replace("/[^0-9+]/", '', $phone);
              }
              А так нет
              <?php
              foreach ($modx->getIterator('modUser') as $user) {
                  $profile = $user->getOne('Profile');
                  $phone = preg_replace("/[^0-9+]/", '', $profile->get('phone'));
                  $user->set('username', $phone);
                  $user->save();
              }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    12