【问题标题】:Add multiple rows in Laravel DB Query (for migrating WordPress usermeta table into new Laravel table)在 Laravel DB Query 中添加多行(用于将 WordPress 用户元表迁移到新的 Laravel 表中)
【发布时间】:2020-05-28 09:58:33
【问题描述】:

我正在将用户从 WordPress 迁移到 Laravel。我想加入 users 和 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 DB 中的新列(并停止使用 WordPress 使用的 user_meta 引用表方法)。

这是我当前的查询代码和我得到的输出:

 $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"

我只想要 'first_name' => 'bob' 而不是 meta_value 和 meta_key,然后还能够对 user_meta 参考表中的多个值执行此操作

如果我正在编写 RAW sql,那么我想我会通过为每个我想要获得的值设置一个 left_join 来解决这个问题。然后我会创建一个别名,如

选择 um1.meta_value 作为 first_name 选择 um2.meta_value 作为姓氏

LEFTJOIN wp_usermeta as um1 LEFTJOIN wp_usermeta as um2

我在没有运气的情况下四处闲逛 - 任何想法都值得赞赏。

谢谢!

我已经写了这里涉及的一些过程以供进一步参考:http://raison.co/migrating-wordpress-users-to-laravel/

【问题讨论】:

  • 一种选择是进行 2 次 db 调用(一个到 wp_users,一个到 wp_usermeta),而不是将两者连接在一起。然后,您将能够遍历用户的 wp_usermeta 数据并将其附加到 wp_users 表的结果中。
  • 不错的主意。如此专注于加入解决方案并没有考虑到这一点。干杯

标签: sql wordpress laravel eloquent


【解决方案1】:

我最终通过使用 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');

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2015-09-22
    • 2017-12-11
    • 2019-11-05
    • 1970-01-01
    • 2015-01-26
    • 2017-12-02
    • 2013-05-23
    • 2017-10-18
    相关资源
    最近更新 更多