为什么我的Laravel模型关系不能保存?

时间:2014-09-06 14:40:39

标签: php database laravel laravel-4 eloquent

无法想出这个。我已经提到了文档,但我没有得到预期的结果。 发生的事情是我的用户模型保存正常,所有数据都存在于我的用户表中,但是头像表仍然是空的。没有错误。

用户模型

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;
    public $timestamps = true;

    public function topics()
    {
        return $this->hasMany('Topic');
    }

    public function posts()
    {
        return $this->hasMany('Post');
    }

    public function avatars()
    {
        return $this->hasMany('Avatar');
    }

}

头像模型

class Avatar extends Eloquent
{
    public $timestamps = true;

    public function user()
    {
        return $this->belongsTo('User');
    }

}

最后,我控制器中的代码片段

$user = new User;
$user -> email = $newEmail;
$user -> name = $newName;
$user -> username = $newUsername;
$user -> password = Hash::make($newPassword);
$user -> avatars -> gravatar  = $gravatar;
$user -> push();

推送后,头像表仍为空。 我可能不是这样做我确定的正确方法。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

假设$gravatar已设置且您正在遵循Laravel命名约定,则您需要首先save()用户模型,然后分别在头像关系上save() ,传入阿凡达模型,所以你有id用户。

传递给save()的任何内容都必须是模型。假设gravataravatars表中的字段,您需要实例化Avatar,设置gravatar属性,并将Avatar的实例保存到avatars关系。

试试这个:

$avatar = new Avatar;
$avatar -> gravatar = 'gravatar.com/avatar/'.md5($newEmail);

$user = new User;
$user -> email = $newEmail;
$user -> name = $newName;
$user -> username = $newUsername;
$user -> password = Hash::make($newPassword);

$user -> save();
$user -> avatars() -> save($avatar);