I am getting a strange error which I cannot work out.
I have a User
and also a Partner
model. A user can have multiple partners. I am trying to retrieve a list of partners that the user has. I am also using Laravel Sanctum as my auth guard.
My relationship code is as follows;
In my user model
public function partners(): HasMany
{
return $this->hasMany(Partner::class);
}
In my Partner model
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
My route definition looks like so;
Route::middleware(['auth:sanctum'])->group(function () {
Route::apiResource('partners', ApiPartnerPartnerController::class)
->only(['index']);
});
and finally in my controller;
public function index(Request $request)
{
return PartnerResource::collection($request->user()->partners());
}
When I hit the endpoint though, I am getting the following error;
Call to undefined method Illuminate\Database\Eloquent\Relations\HasMany::mapInto()
I cant figure out the issue. Any insight would be greatly appreciated.
Advertisement
Answer
When You are Calling user()->partners()
it returns IlluminateDatabaseEloquentRelationsHasMany
Instance.
Resource needs to get IlluminateDatabaseEloquentCollection
Instance.
You have to just call user()->partners
( Remove parenthesis )
Or call get method on IlluminateDatabaseEloquentRelationsHasMany
Instance, to get Collection
user()->partners()->get()