我正在开发一个 api,其中很多都工作得很好,但由于某种原因我无法更新成员。
这是路线:
Route::prefix('member')->group(function () {
Route::post('login', [App\Http\Controllers\Api\MemberAuthController::class, 'login']);
Route::post('register', [App\Http\Controllers\Api\MemberAuthController::class, 'register']);
Route::middleware('auth:member_api', 'member.auth.api')->group(function () {
Route::get('/', [App\Http\Controllers\Api\MemberAuthController::class, 'getMember']);
Route::put('/', [App\Http\Controllers\Api\MemberController::class, 'update']);
Auth 效果很好,我登录、获取令牌、粘贴令牌,然后将 PUT 请求发送到我的本地主机或服务器。
当我将请求发送到本地主机时,我会返回更新后的成员,但是当我向服务器发送请求时,我会得到原样的成员,并且它在数据库中仍然相同。
这是MemberController更新方法:
* @param string $locale The locale setting (e.g., 'en-us')
* @param Request $request
* @param MemberService $memberService
* @return \Illuminate\Http\JsonResponse
*/
public function update(string $locale, Request $request, MemberService $memberService)
{
$member = $request->user('member_api');
$data = $request->only(['name', 'email', 'password', 'street_name_number', 'city', 'zipcode', 'phone']);
$updatedMember = $memberService->update($member, $data);
return response()->json(['member' => $updatedMember], 200);
这就是MemberService更新方法
* @param Member $member
* @param array $data
* @return Member
*/
public function update(Member $member, array $data): Member
{
if (isset($data['password'])) {
$data['password'] = bcrypt($data['password']);
}
$member->update($data);
return $member->fresh();
}
我以为这很简单,但我不知道为什么它不起作用。
编辑:在两个单独的服务器上尝试过,它是带有 Web 应用程序和 api 部分的已完成的 Laravel 应用程序之一。这个 API 部分需要一些扩展,直到更新方法为止一切都很好
就您共享的代码片段而言,我认为应该可以完成工作。然而,我认为可能错误的是会员模式;我知道我现在看不到内容,但您可能需要检查
fillable
以查看您尝试更新的列是否在 fillable
中。我认为,它们不属于模型的 guarded
属性。
如果你不知道,这仍然基于我的假设,要在 Laravel 中批量更新属性,你必须将它们包含在
fillable
中,或者至少排除那些你不想批量更新的属性通过将它们包含在模型的 guarded
属性中进行更新。