You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman首次调用API无法返回企业签到数组问题求助

问题诊断与解决方案

看起来你遇到的问题是首次调用签到API后,返回的企业签到数组没有即时更新——这是因为Laravel模型的关联查询会默认缓存结果,当你执行attach操作完成签到后,模型原有的关联缓存并没有被刷新,所以返回的还是旧的空数组;第二次调用时模型重新从数据库拉取数据,关联状态才会正常显示。

问题代码分析

你的checkinCompany方法在执行attach后直接返回了操作的执行结果(通常是受影响的行数),并没有更新当前模型的关联缓存:

public function checkinCompany(Company $company) { 
    if (! $this->isCheckedinCompany($company)) { 
        return $this->checkinCompanies()->attach($company); 
    } 
}

修复方案

你需要在执行attach之后,重新加载关联以清除缓存,然后返回更新后的签到列表,这样首次调用就能拿到最新的数据。修改后的代码如下:

public function checkinCompany(Company $company) { 
    if (! $this->isCheckedinCompany($company)) { 
        $this->checkinCompanies()->attach($company);
        // 重新加载关联,清除旧缓存
        $this->load('checkinCompanies');
    }
    // 返回更新后的企业签到数组
    return $this->checkinCompanies;
}

额外优化建议

另外,你的isCheckedinCompany方法用count()判断是否已签到,其实可以换成exists()更高效——exists()会在找到匹配记录后立即停止查询,不需要统计所有符合条件的行数:

public function isCheckedinCompany(Company $company) { 
    return CompanyCheckin::where('company_id', $company->id)
        ->where('user_id', $this->id)
        ->exists(); 
}

这样修改后,首次调用API时,执行完签到操作会立即刷新关联缓存并返回最新的签到数组,就不会出现第一次返回空的情况了。

内容的提问来源于stack exchange,提问作者Moaiz Pervaiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:43:51