php 尝试在模型[App\Models\Tweet]上延迟加载[user],但延迟加载被禁用,尽管我使用了即时加载

xzlaal3s  于 2023-11-16  发布在  PHP
关注(0)|答案(2)|浏览(136)

我有这个fetch函数,如果没有用户被选中,它会获取完整的提要,如果有用户被选中,它会获取特定用户的提要。

public function fetch(): void
{
    if ($this->userToShowFeedFor == null) {
       $this->tweets = Tweet::with('user')->withCount('likes')->get();
    } else {
       $this->tweets = $this->userToShowFeedFor->tweets;
    }
}

字符串
在我的刀片模板中,我有:

@if (!$userToShowFeedFor)
      <a wire:navigate href="{{ route('userpage', ['user' => $tweet->user]) }}"
         class="text-gray-600 cursor-pointer underline">u/{{ $tweet->user->username }}</a>
@else
    <p class="inline text-gray-600 ">u/{{ $tweet->user->username }}</p>
@endif


尽管使用with('user'),我仍然得到这个错误。


的数据
我甚至使用tinker来确保我没有在引擎盖下做任何糟糕的SQL查询,它看起来都很好。


j2cgzkjk

j2cgzkjk1#

在您的应用中检查结构Model::preventLazyLoading,通常在 AppServiceProvider 类的 * Boot * 方法中设置。
如果设置了它,当你尝试延迟加载一个模型时,会抛出一个异常。
这里的文档

owfi6suc

owfi6suc2#

我认为运行时代码与你预期的不同,我认为它在那个异常上遇到了else情况,你能试着在最后添加load('user')吗?

public function fetch(): void
{
    if ($this->userToShowFeedFor == null) {
       $this->tweets = Tweet::with('user')->withCount('likes')->get();
    } else {
       $this->tweets = $this->userToShowFeedFor->tweets->load('user');
    }
}

字符串
load的工作原理与with相同,但它是懒惰的渴望加载,在您获得结果后,您可以检查文档

相关问题