Reputation: 4033
I have a simple controller;
namespace App\Http\Controllers\Databases;
use App\Models\Database;
use App\Http\Resources\DatabaseCollection;
use Illuminate\Http\Request;
class DatabaseController extends Controller
{
public function index(Request $request)
{
return new DatabaseCollection(Database::all());
}
}
It is meaning to return a list of database credentials which we store in the DB;
The collection resource looks like so;
namespace App\Http\Resources;
use App\Models\Database;
use Illuminate\Http\Resources\Json\ResourceCollection;
class DatabaseCollection extends ResourceCollection
{
public function toArray($request)
{
$this->collection->transform(function (Database $database) {
return new DatabaseResource($database);
});
return parent::toArray($request);
}
}
and then the standard resource looks like so;
namespace App\Http\Resources;
use App\Models\Database;
class DatabaseResource extends Resource
{
public function toArray($request): array
{
return [
'id' => $this->id,
'name' => $this->name,
'host' => $this->host,
'port' => $this->port,
];
}
}
This is returning an error;
Argument 1 passed to App\Http\Resources\DatabaseCollection::App\Http\Resources\{closure}() must be an instance of App\Models\Database, instance of App\Http\Resources\DatabaseResource given
It is a bit strange as i am using this same method for a handful of controllers and it all works perfect, except this is the only one that returns this error.
Any help would be awesome.
Upvotes: 1
Views: 399
Reputation: 2977
Your code does not define Resource
class anywhere so it assumes it should be found in the current namespace App\Http\Resources
namespace App\Http\Resources;
class DatabaseResource extends Resource
However Laravel defines Resource class like this.
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
https://laravel.com/docs/8.x/eloquent-resources
So you should update your code accordingly.
Upvotes: 2