Добавьте несколько строк в Laravel запрос к БД (для переноса таблицы пользовательских меток WordPress в новую таблицу Laravel) - PullRequest
0 голосов
/ 12 февраля 2020

Я перевожу пользователей из WordPress в Laravel. Я хочу объединить пользователей и таблицы user_meta. Затем я импортирую в новую таблицу.

В моей таблице user_meta у меня есть несколько строк, назначенных user_id. Как импортировать несколько строк со своим уникальным идентификатором.

Например.

umeta_id = 1, user_id = 1, meta_key = first_name, meta_value = Bob
umeta_id = 2, user_id = 1, meta_key = last_name, meta_value = Builder

В приведенном выше примере я хотел бы добавить first_name и last_name к выводу запроса.

Затем импортируйте в новый столбец в БД Laravel (и прекратите использовать подход таблицы ссылок user_meta, используемый WordPress).

Вот мой текущий код запроса и вывод, который я получаю:

 $wp_users = DB::connection('wordpress_db')
            // ->select(DB::raw('um.meta_value as first_name'))
            ->select('um.meta_value as first_name')
            ->table('wp_users')
            ->leftJoin('wp_usermeta as um', function ($q) {
                $q->on('um.user_id', '=', 'wp_users.id')
                    ->where('um.meta_key', '=', "first_name");
            })
            ->orderBy('wp_users.id');

и если я дам вывод:


  +"ID": 1
  +"user_login": "123"
  +"user_pass": "123"
  +"user_nicename": "123"
  +"user_email": "b@x"
  +"user_url": "https://x"
  +"user_registered": "2016-1-1 13:47:32"
  +"user_activation_key": ""
  +"user_status": 0
  +"display_name": "Bobby Builds"
  +"umeta_id": 222
  +"user_id": 1
  +"meta_key": "first_name"
  +"meta_value": "Bob"

Вместо meta_value и meta_key я просто хочу 'first_name' => 'bob', а затем также возможность сделать это для нескольких значения в справочной таблице user_meta

Если бы я писал RAW sql, то я бы подошел к этому, имея left_join для каждого значения, которое я хочу получить. Затем я бы создал псевдоним, например

SELECT um1.meta_value в качестве first_name SELECT um2.meta_value в качестве last_name

LEFTJOIN wp_usermeta в качестве um1 LEFTJOIN wp_usermeta в качестве um2

без удачи - любые идеи приветствуются.

Спасибо!

Я написал о некоторых процессах, участвующих здесь, для дальнейшего ознакомления: http://raison.co/migrating-wordpress-users-to-laravel/

1 Ответ

0 голосов
/ 13 февраля 2020

В конце я сделал это, используя select, чтобы выбрать все столбцы из wp_users, а затем выборочно добавив новые объединения.

См. Фиксированный код ниже:

        $wp_users = DB::connection('wp_db')
        ->table('wp_users')
        ->leftJoin('wp_usermeta as um', function ($q) {
            $q->on('um.user_id', '=', 'wp_users.id')
                ->where('um.meta_key', '=', "wbp_user_mob_phone");
        })
        ->leftJoin('wp_usermeta as um2', function ($q) {
            $q->on('um2.user_id', '=', 'wp_users.id')
                ->where('um2.meta_key', '=', "first_name");
        })
        ->select('wp_users.*', 'um.meta_value as wbp_user_mob_phone', 'um2.meta_value as first_name')
        ->orderBy('wp_users.id');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...