![](/img/trans.png)
[英]Is it possible to setCookie() in Laravel 5 before returning from the controller method?
[英]Laravel store() method from api controller not returning updated data
我遇到了一个问题,我的UserCountries
API controller 中的 store 方法返回的数据似乎落后了一步,我不知道为什么。 我的应用程序有两个模型: Country
和User
,它们与 pivot 表具有多对多关系。 在我的应用程序中,特定用户应该能够“喜欢”和“不喜欢”一个国家。
这主要按预期工作,但是我的问题是每个请求返回的数据都落后了一步 - 例如,如果我发送一个POST
请求来喜欢一个特定的国家,我得到一个200
响应,但我返回了一个UserCountriesResource
没有包括应该刚刚添加的国家。 如果我随后立即发送一个GET
请求,它会返回一个包含该国家/地区的UserCountriesResource
。 谁能帮我弄清楚为什么?
这是我的路线:
Route::group(["prefix" => "me/countries"], function(){
Route::get("", [UserCountries::class, "index"]); // see all countries liked by user
Route::post("", [UserCountries::class, "store"]); // add or remove country from user
});
我在 UserCountries controller 中的索引方法如下:
public function index()
{
return CountryResource::collection(auth()->user()->countries);
}
我在 UserCountries controller 中的存储方法如下:
public function store(UserCountriesRequest $request)
{
$user = auth()->user();
$user->setCountries($request->get("countries"));
return new UserCountriesResource($user);
}
store 方法调用 User model 中的setCountries
方法:
public function setCountries(array $strings) : User
{
$countries = Country::fromStrings($strings);
$countries->map(function($country) use($countries){
if($this->countries->contains($country)){
Country::find($country->id)->users()->detach($this->id);
} else {
$this->countries()->syncWithoutDetaching($country->id);
}
});
return $this;
}
上面的 setCountries 方法依次调用 Country model 中的fromStrings
方法:
public static function fromStrings(array $strings) : Collection
{
return collect($strings)->map(fn($str) => trim($str))
->unique()
->map(fn($str) => Country::firstOrCreate(["NAME"=>$str]));
}
如果我可以添加任何其他内容以使其更有帮助,请告诉我!
在添加/删除任何相关记录之前,您正在加载关系。 加载的关系 Collection 将不包括这些更改。 您将需要重新加载关系以获取相关记录的新列表。
我不知道您的代码的 rest 但如果是这种情况,您会添加这样的调用:
$user->load('countries');
这是加载关系(如果尚未加载):
if($this->countries->contains($country))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.