2016-11-23 53 views
0

我正在做一个数据库重构,将数据移动到数据透视表并创建适当的关系。这是一个古老的数据库,所以有储存的一些有趣的选择......事情是这样的:如何将这些爆炸数据移动到另一个表格中? Laravel 5.3

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只是打印$标签$标签$标签$标签。我知道这跟我搞混了我对laravel如何与数组一起工作的理解。那么我该如何做到这一点呢?

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

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

编辑:

用于存储代码将看起来像这样的表:

id | tag_id | user_id 

因为有很多更多的重构做,我就必须弄清楚如何处理链接下一个。在print_r('$tag')

回答

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 
       } 
      } 
} 
1

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

+0

好点的print_r。我相信每个标签都应该创造一个新的行。 – Mugluck

1

当您使用在打印单引号,PHP将打印完全字符串,它不会评估字符串中的变量。从print_r中删除引号。

注:与双引号的,当他们在 单引号的字符串出现定界符语法,变量和特殊字符 转义序列不会被扩大。

+0

解决了这个问题,谢谢。 – Mugluck

相关问题