模型关系未更新

时间:2018-08-24 22:21:30

标签: laravel laravel-5 eloquent laravel-5.6

我从一位作者创建了一条帖子,当一位作者发表的帖子数量达到X时,即时通讯正在触发事件侦听器,所以即时通讯的作用类似于:

$author = Author::where('author_id', Auth::user()->id)->first()
$post = new Tip();
$post->author_id = $author->id;
...
$post-save();

所以现在想象一下,在上一次保存之前,我已经有5个帖子,现在我应该有6个;

但是当我从作者那里调用模型方法时:

dd(sizeof($author->posts));

它给了我5,我可以想象这是因为帖子是在$ author创建的实例之前保存的,但是我希望在我调用“ $ author-> posts”时创建一个查询并给我当前结果。

有人可以告诉我怎么了吗,Laravel是否有办法解决这些情况,除了在保存后创建一个新实例并获取帖子长度之外?

2 个答案:

答案 0 :(得分:0)

也许这是因为保存之前您在$author->posts某处运行过 检索并缓存直到php脚本完成执行。

为确保获得最新更改,请尝试再次执行以下查询:

dd(sizeof($author->posts()->get()));

答案 1 :(得分:0)

如果以上代码均在同一请求中执行,则现有的$ author对象可能不了解新的$ post(如果已按照您描述的方式保存了该对象)。

您可以通过the relationship保存,这将更新$ author对帖子的了解,例如

$author = Author::findOrFail(Auth::id());
$post = new Post(['message' => 'A new post.']);
$author->posts()->save($post);
dd($author->posts()->count());