为啥我的 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()
的东西都必须是模型。假设gravatar
是avatars
表中的一个字段,则需要实例化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 模型关系没有保存?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的模型在关系子查询中看不到 spatie 权限特征方法?