为啥我的 Laravel 模型关系没有保存?

Posted

技术标签:

【中文标题】为啥我的 Laravel 模型关系没有保存?【英文标题】:Why isn't my Laravel model relationship saving?为什么我的 Laravel 模型关系没有保存? 【发布时间】:2014-10-31 07:41:43 【问题描述】:

想不出来这个。我参考了文档,但没有得到预期的结果。 发生的事情是我的用户模型保存得很好,所有数据都保留在我的用户表中,但头像表仍然是空的。不会抛出任何错误。

用户模型

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');
    


最后,我的控制器中的代码 sn-p:

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

Avatar 表在推送后保持为空。 我确定我可能没有以正确的方式执行此操作。有什么想法吗?

【问题讨论】:

【参考方案1】:

假设 $gravatar 已设置并且您遵循 Laravel 命名约定,您需要先 save() User 模型,然后分别在头像关系上 save(),传入 Avatar 模型,所以您有用户的id

任何传递给save() 的东西都必须是模型。假设gravataravatars 表中的一个字段,则需要实例化Avatar,设置gravatar 属性,并通过avatars 关系保存Avatar 的实例。

试试这个:

$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);

【讨论】:

() 不见了。您无法在收藏中保存任何内容。 嗯,给出了一个错误:传递给 Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 的参数 1 必须是 Illuminate\Database\Eloquent\Model 的实例,给出的字符串。作为参考,$gravatar 是一个 url 字符串:$gravatar = 'gravatar.com/avatar/'.md5($newEmail); 好的,我想我明白你想要做什么,但是,我只是猜测你的架构是什么。我更新了答案。如果这对您不起作用,您可以发布您的表格字段吗? 抱歉,应该给出表架构。但这很好用,谢谢!

以上是关于为啥我的 Laravel 模型关系没有保存?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 不保存一对多关系

为啥我的模型在关系子查询中看不到 spatie 权限特征方法?

为啥我的多对一 laravel 关系不起作用?

如何在 Laravel 中保存多对多多态关系中的条目?

Laravel:当我的外键在数组中时,如何在模型中添加关系?

如何使用 Eloquent 保存 OneToMany 关系