save() 后 Laravel 关系可用性

2024-01-10

我正在使用 Laravel 5 构建一个简单的时间跟踪应用程序,其中有两个 Laravel 模型,一个称为“User”,一个称为“Week”

这些关系非常简单:
周.php:

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

用户.php:

function weeks()
{
    return $this->hasMany('App\Week');
}

现在,User.php 文件还有一个简单的帮助器/新奇函数,名为“getCurrentWeek()”,顾名思义,它返回当前周

function getCurrentWeek()
{
    $possibleWeek = $this->weeks->sortByDesc('starts')->all();
    if(count($possibleWeek) != 0)
    {
        return $possibleWeek[0];
    }
    else
    {
        return null;
    }
}

我的问题是:如果我为用户创建第一周并将其附加/关联到用户,如下所示:

$week = new Week;

//Omitted: Setting so attributes here ...

$week->user_id = $user->id;
$weeks->save()
$user->weeks()->save($week);

然后调用$user->getCurrentWeek();方法,该方法返回null,虽然创建了新的一周,但与用户相关并已保存到数据库中。在我看来,预期的行为是getCurrentWeek()返回新创建的周。
我在这里对雄辩有什么误解/做错了?


关系属性在第一次访问时会延迟加载。加载后,它们不会自动刷新关系中添加或删除的记录。

自从你的getCurrentWeek()函数使用关系属性,此代码将起作用:

$week = new Week;
// setup week ...
$user->weeks()->save($week);

// $user->weeks attribute has not been accessed yet, so it will be loaded
// by the first access inside the getCurrentWeek method
dd($user->getCurrentWeek());

但是,这段代码将不起作用:

// accessing $user->weeks lazy loads the relationship
echo count($user->weeks);

// relate a new record
$week = new Week;
// setup week ...
$user->weeks()->save($week);

// $user->weeks inside the method will not contain the newly related record,
// as it has already been lazy loaded from the access above.
dd($user->getCurrentWeek());

您可以修改您的getCurrentWeek()使用关系方法的方法($this->weeks()) 而不是属性 ($this->weeks),这将始终命中数据库,或者您可以重新加载关系(使用load()方法)添加或删除记录后。

改变getCurrentWeek()使用关系法的方法weeks()(更新方法由@Bjorn提供)

function getCurrentWeek()
{
    return $this->weeks()->orderBy('starts', 'desc')->first();
}

或者,使用以下命令刷新关系load() method:

// accessing $user->weeks lazy loads the relationship
echo count($user->weeks);

// relate a new record
$week = new Week;
// setup week ...
$user->weeks()->save($week);

// reload the weeks relationship attribute
$user->load('weeks');

// this will now work since $user->weeks was reloaded by the load() method
dd($user->getCurrentWeek());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

save() 后 Laravel 关系可用性 的相关文章

随机推荐

  • 将其他编辑器与 TortoiseHg 一起使用

    我正在尝试使用 TortoiseHG 的其他编辑器 而不是 Windows 记事本 我已经尝试过这里提到的解决方案 Mercurial 和 Notepad 集成 https stackoverflow com questions 92078
  • 我可以改进这个 JQuery 图像替换代码吗?

    HTML 看起来有点像 dl dt img src Something 1 dt dd Something 1 Text dd dl 此 HTML 重复 1 次或多次 因此同一页面上可能有许多 HTML 实例 我用来扩展 dd 并替换图像的
  • REST、HTTP DELETE 和参数

    向 HTTP DELETE 请求提供参数是否存在非 RESTful 的情况 我的场景是 我正在建模 您确定要删除它吗 设想 在某些情况下 资源的状态表明请求的删除可能无效 您可能可以自己想象一些需要确认删除的场景 我们采用的解决方案是向删除
  • 盐是否需要随机才能保护密码哈希?

    我对安全性知之甚少 我需要找到基础知识的基本解释 并且正在尝试想出一种合理的方法来使用 Net 将用户密码存储在数据库中 这是我当前的解决方案 private static byte HashPassword string password
  • 从 .Net 打印服务器端(不带 WinForms)

    嘿 印刷迷需要一些指导来引导我朝着正确的方向发展 我正在为当地一家商店开发一个 epos 系统 稍后我们将把它与一个电子商务网站结合起来 epos 系统的前端将是 WinForms 因此我们可以轻松处理 USB 设备 并且我们将使用 Web
  • 如何将常规 numpy 数组转换为记录数组?

    我读了一系列数字 np array f read split dtype np float64 然后我使用以下方法将其转换为二维数组np reshape 之后如何转换arr到记录数组 我尝试过 类似 以下操作 filename unstru
  • 使用 bash 脚本在 EC2 实例上启动会话管理器后如何在 EC2 实例上运行命令?

    我正在编写 bash 脚本来使用会话管理器在 ec2 实例上安装缺少的补丁 我可以使用脚本启动会话 但我不确定如何使用脚本在其上运行命令 instanceid i 098xxxx echo instanceid echo instance
  • Snowflake 身份验证令牌已过期 (390114) - Snowflake-SQLAlchemy 是否有心跳代码?

    我开发了一个 Flask 应用程序 使用 SQLAlchemy 连接到 Snowflake DB 作为后端 如果网站闲置时间超过 4 小时 我会遇到 Snowflake 身份验证令牌过期问题 我在谷歌上查了一下并找到了答案 https gi
  • jQueryUI 手风琴 - 每页可以有多个吗?

    我对 jQuery 很陌生 但已经找到了手风琴小部件并让它在大部分情况下都可以工作 我的问题是 一页上是否可以有多个手风琴 我有几个列表需要在视觉上分开 并且每个列表都需要是自己独立的手风琴 到目前为止 这是我的代码
  • Typescript 中动态导入模块的类型/类是什么?

    我在打字稿中查找导入模块的类型时遇到问题 有人可以帮助我吗 为了澄清我的问题我有一个模块module ts export class RSL1 然后我将其加载到我的index ts with const script await impor
  • 单击锚点时如何设置/存储 cookie

    我正在尝试使用 Cookie 以便引用单击的锚标记应用默认样式或特定样式 即使浏览器关闭 重新打开也是如此 因此 如果用户单击第二个链接 关闭或刷新浏览器并重新打开 则样式应仍处于活动状态 如果这是第一次 则应应用默认样式 这有点超出了我的
  • 如何测试 Greasemonkey 脚本,尤其是在网页的本地副本上?

    我有自己的 javascript 需要用 Greasemonkey 进行测试 我以前从未与 Greasemonkey 合作过 我如何测试脚本 我没有在万维网上测试它 我已经保存了目标页面 Firefox gt 将页面另存为 gt 网页 完成
  • 如何将条件必需属性放入类属性中以与 WEB API 一起使用?

    我只想放条件必需属性这是与WEB API Example public sealed class EmployeeModel Required public int CategoryId get set public string Emai
  • 有没有一种简单的方法可以将此文本解析为地图

    我收到以下服务的响应 如何将其解析为Map 我首先想到在空白处分割 但它不起作用 因为该值可能包含空格 例如看看的价值SA键入以下响应 我想到的一种选择是在空白处分割provided前面的字符是双引号 但不知道如何为此编写正则表达式 TX
  • 命名管道服务器,如何中断或超时等待客户端连接和传入数据

    我正在为 Windows 编写一个简单的命名管道服务器 调用 Windows API 在 Java 中使用 JNA 但这不相关 我试图找出如何避免服务器永远卡住等待客户端连接或来自客户端的数据 服务器代码执行以下操作 1 它通过调用创建管道
  • 如何使用 graphviz 绘制树图?

    我无法重现一个简单的例子 事情是这样的 import pandas as pd import numpy as np import sklearn as skl from sklearn import tree from sklearn c
  • 如何在android中实现自定义按钮的onkeydown事件

    我在布局中定义了一个按钮 我实现了 onclick 按钮 没有任何问题 但现在我需要知道我的按钮何时向下和向上 例如财务按钮的 onkeydown 事件 海关按钮有类似的东西吗 因为 onKeyDown int keyCode KeyEve
  • 帮助递归选择

    情况是这样的 我有两张桌子 用户 注册用户 网站 消息 他们之间发送的个人消息 消息表有这些列 只是重要的列 id 发件人 发送邮件的用户的 ID 信息 用户的接收者ID 消息已发送 reply to 这条消息的id 回复 可以为NULL
  • POM/JAR中出现的宏依赖

    我有一个使用宏的 scala 项目 它基本上遵循此处描述的确切方法 http www scala sbt org 0 12 4 docs Detailed Topics Macro Projects html http www scala
  • save() 后 Laravel 关系可用性

    我正在使用 Laravel 5 构建一个简单的时间跟踪应用程序 其中有两个 Laravel 模型 一个称为 User 一个称为 Week 这些关系非常简单 周 php public function user return this gt