如何将此爆炸数据移动到另一个表中? Laravel 5.3

时间:2016-11-23 07:22:50

标签: mysql database laravel-5 migration pivot-table

我正在做一个数据库重构,将数据移动到数据透视表中并创建正确的关系。这是一个旧的数据库,所以有一些有趣的存储选择...像这样:

enter image description here

是的,这很有趣。无论如何,我对Laravel如何做它的物体和阵列仍然有点不稳定,这对我来说似乎仍然是疯狂的。所以我在这里有这个查询,这是一半:

public function move() {

        $prefs = DB::table('users')->select('id', 'Preferences')->where('Preferences', '!=', '')->get();

            foreach ($prefs as $pref) {
                 $tags = $pref->Preferences;
                 $tag = explode(',', $tags);
                 print_r('$tag');
             }

[已解决的小问题]现在print_r只打印$ tag $ tag $ tag $ tag。我知道这与我弄乱了我对laravel如何与数组一起工作的理解有关。那我该怎么做呢?

我的目标是遍历每个用户,抓取他们的标签,爆炸这些标签,然后将它们打印到user_id旁边的数据透视表(tag_user)。

注意:标签包含在首选项列中,如上图所示。

编辑:

用于存储标签的表格如下所示:

id | tag_id | user_id

由于需要进行更多的重构,我将不得不弄清楚如何处理链接。

3 个答案:

答案 0 :(得分:1)

print_r('$tag')中的问题删除单引号:print_r($tag)

答案 1 :(得分:1)

当你在打印时使用单引号时,php会精确打印字符串,它不会评估字符串中的变量。从print_r中删除引号。

来自PHP documentation

  

注意:与双引号和heredoc语法,变量和。不同   特殊字符的转义序列不会被扩展   以单引号字符串出现。

答案 2 :(得分:1)

您需要在控制台php artisan make:model Tag中为user_tag表创建模型。在模型中:

    class Tag extends Model
{
protected $table = 'tag_user'; //this is name of table in your DB
protected $fillable = ['user_id','tag_id']; //this for mass assingment
...
...
...
}

然后,插入新行:

public function move() {

        $prefs = DB::table('users')->select('id', 'Preferences')->where('Preferences', '!=', '')->get();

            foreach ($prefs as $pref) {
                 $tags = $pref->Preferences;
                 $tag = explode(',', $tags);
                 foreach ($tag as $t) {
                     $taguser = new Tag(array(
                                       'user_id' => $pref->id,
                                       'tag_id' => $t
                                      ));
                     $taguser->save(); //save in table
                 }
            }
}