Php Laravel 8集合错误,表示传递了模型实例而不是资源

Php Laravel 8集合错误,表示传递了模型实例而不是资源,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个简单的控制器 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) {

我有一个简单的控制器

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());
    }
}
这意味着返回我们存储在数据库中的数据库凭证列表

集合资源看起来是这样的

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);
    }
}
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,
        ];
    }
}
然后标准资源看起来是这样的

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);
    }
}
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,
        ];
    }
}
这是返回一个错误

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
这有点奇怪,因为我对少数几个控制器使用了相同的方法,并且它都工作得很完美,除了这是唯一一个返回此错误的方法


任何帮助都会很棒。

您的代码没有在任何地方定义
资源
类,因此它假定应该在当前名称空间
App\Http\Resources

namespace App\Http\Resources;

class DatabaseResource extends Resource
然而,Laravel这样定义资源类

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource


因此,您应该相应地更新代码。

哦,这很有效。非常感谢。