【发布时间】: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