我正在做一个数据库重构,将数据移动到数据透视表中并创建正确的关系。这是一个旧的数据库,所以有一些有趣的存储选择...像这样:
是的,这很有趣。无论如何,我对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
由于需要进行更多的重构,我将不得不弄清楚如何处理链接。
答案 0 :(得分:1)
print_r('$tag')
中的问题删除单引号:print_r($tag)
答案 1 :(得分:1)
当你在打印时使用单引号时,php会精确打印字符串,它不会评估字符串中的变量。从print_r中删除引号。
注意:与双引号和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
}
}
}