当前位置: 首页 > 知识库问答 >
问题:

雄辩:访问模型关系或创建新的[复制]

云宏儒
2023-03-14

假设数据库中有 2 个表:user、appUser(用户有一个 appUser 和关系被定义)有用户 id,为了更新 appUser 数据,我们可以使用以下代码(如果没有 appUser 相对模型):

$user = user::find($userID);
if(count($user->appUser) == 0){
    $appUser = new appUser();
    $appUser->column = $value;
    $user->appUser->save();
} else {
    $appUser = $user->appUser;
    $appUser->column = $value;
}
$user->appUser()->save($appUser);

看起来很好,但如果有另一个联系人表(appUser有一个联系人)呢,所以为了更新联系人,我们应该添加更多的if和elses,以确保appUser和contact关系存在。我的问题是,如果laravel concertive中不存在关系,是否有任何简洁的方法来加载关系并创建新的关系?

在这种情况下,它会像:

$user = user::find($userID);
// No Exception!
$user->appUser->column = $value;
$user->appUser->save();

共有1个答案

龚威
2023-03-14

从Laravel 5.3.23开始,在HasOne关系中添加了一个新的with Default方法,应该会对此有所帮助。

在您的示例中,您的< code >用户模型将具有以下关系:

public function appUser() {
    return $this->hasOne(appUser::class)->withDefault();
}

这将做的是,如果数据库中没有相关记录,它将返回相关 (appUser) 类的新实例。因此,您的代码最终将如下所示:

$user = user::find($userID);
// if user has an appuser, $user->appUser will return it;
// otherwise, it will return a new instance of your appUser model
$user->appUser->column = $value;
$user->appUser()->save();
 类似资料:
  • 我试图通过使用Laravel Eloquent获得数据,但我无法访问。无论何时尝试,它都显示尝试获取非对象的属性“name” 我有两个模型。类别和文章。类别有许多文章。以下是模型: 类别模型 文章模式 物品管理员 查看刀片(admin.article.pending) 在这里的刀片,我不能访问类别通过雄辩的属于功能,我没有得到背后的原因得到的消息: ErrorException(E_ERROR)试

  • 我有一个表事务与复合主键id,Nom,日期和一个表Cour与Nom作为主键和一个事务有关一个Cour。 我怎样才能得到一个有口才关系的特定交易的课程?

  • 因此,我在JeffreyWay的屏幕广播中了解到,我可以使用Eloquent从注入到另一个模型的模型中获取相关id。 我正在关注他关于Laravel 5.4的系列报道。 在这里,我有一个用户到帖子的一对多关系。 应用程序/帖子 在我的用户模型中,我有一个发布方法,其中注入了发布模型。发布方法用于创建进入数据库的发布条目。 应用/用户 然后,我在PostsController中有一个存储方法,它在我

  • 我有三种模式——博客、帖子、评论。博客有很多帖子,帖子有很多评论 当我写作时 它会给所有的博客发帖子和评论。但我将如何获得那些由管理员用户创建的博客,即评论表中的用户id。在哪里写入

  • 我有这种多对多的关系Laravel雄辩的关系模型是: 我可以在控制器中执行此操作: 在这里,我只通过直接枢轴关系获得email_subtype_id,但必须做额外的工作来获得相关的电子邮件子类型名称。 我需要获得电子邮件子类型名称[直接]从第三个模型电子邮件子类型关系oneTo很多[有很多和属性到]涉及到枢轴模型与电子邮件子类型模型使用类似的东西: 请帮忙!

  • 问题内容: 插入新记录或更新(如果存在)的快捷方式是什么? 问题答案: 这是“ lu cip”正在谈论的完整示例: 以下是Laravel最新版本上的文档更新链接 此处的文档:更新的链接

  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 我在我的Laravel项目中与雄辩的关系作斗争。 我的数据库中有一个“用户”表和一个“用户行”表。“用户行”表中有一个“用户id”字段,该字段与“用户”中的“id”字段相对应,属于典型的主-明细关系。 用户模型与用户线模型有很多关系。UserLine模型与用户模型具有belongsTo关系。 在我的应用程序中,我有一个包含多个用户行的用户表单。在表单提交期间,可以添加、更改或删除这些用户行。到目前