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
因此,您应该相应地更新代码。哦,这很有效。非常感谢。