我有'用户'表和'activation_tokens'表。我在User模型中有一个关系为hasOne(ActivationToken :: class);
这一切都很好。现在我想在创建用户时创建一个令牌。所以我打电话给
$user->ActivationToken()->create(array('token'=>'RANDOM_STRING"));
这一切都很好,但我遇到了质量分配错误。我不想要将'token'设置为可填充。
相反,我尝试
$activationToken = new ActivationToken();
$activationToken->token = 'RANDOM_STRING";
$activationToken->save();
哪个好,但它没有在查询中设置user_id字段。我想我可以通过设置$activationToken->user_id = $user->id;
手动完成它但是这感觉不对,因为ORM应该自动处理这个文档似乎做广告。所以我觉得我做错了什么?
我无法弄清楚如何正确地做到这一点。任何提示?
谢谢!
答案 0 :(得分:1)
也许更多的是orm-ish:
...
$activationToken->user()->associate($user);
$activationToken->save();
$activationToken->user()
是指向User模型的关系的名称。请注意()
!
答案 1 :(得分:0)
因此,在搜索网页后,我发现我可以暂时停止批量分配限制。
ActivationToken::unguard();
$user->ActivationToken()->create(array('token'=>str_random(100)));
ActivationToken::reguard();
所以这似乎工作正常。此外,jsphpl的反应非常好,下面的解决方案也很好。
$activationToken = new ActivationToken();
$activationToken->token = str_random(100);
$activationToken->user()->associate($user);
$activationToken->save();
当然还有一些问题。
1-为什么
$activationToken->user()->associate($user);
优于
$activationToken->user_id = $user->id;
2-执行了无人防守行:
ActivationToken::unguard();
在另一个PHP进程调用reguard()之前,是否有任何方法可以滥用该表?注意:我猜它只影响运行过程,所以在我的情况下它应该是安全的......或者
无论如何,这些都超出了原始问题的范围,所以......
感谢所有回复!