【发布时间】:2023-04-06 03:53:02
【问题描述】:
我有一个 BaseRepository 类,其方法对所有模型都有效。唯一的问题是,用户模型是从 use Illuminate\Foundation\Auth\User 派生的。所以它会抛出一个类型错误,因为构造函数需要一个 Illuminate\Database\Eleoquent\Model 的实例。我该如何解决这个问题?
这是我的 UserRepository.php:
namespace App\Repositories\User;
use App\Model\User; use App\Repositories\Base\BaseRepository;
class UserRepository extends BaseRepository {
public function __construct(User $user)
{
parent::__construct($user);
}
}
BaseRepository.php
namespace App\Repositories\Base;
use App\User;
use Illuminate\Database\Eleoquent\Model;
class BaseRepository {
public function __construct (Model $model) {
$this->model = $model;
}
public function all() {
return $this->model->orderBy('id','desc')->get();
}
}
这是错误:类型错误: 传递给 App\Repositories\Base\BaseRepository::__construct() 的参数 1 必须是 Illuminate\Database\Eleoquent\Model 的实例,给定 App\User 的实例,在 C:\wamp64\www\adblog\ 中调用app\Repositories\User\UserRepository.php
【问题讨论】:
-
我认为您可以尝试使用上下文绑定。因此,当您的
UserRepository类需要User时,您可以传递实际的用户实例。 -
你注意到你的错字了吗?您的基类构造函数是否需要 Illuminate\Database\Eleoquent\Model 或 Illuminate\Database\Eloquent\Model?
-
用户模型是
Illuminate\Database\Eloquent\Model...您使用的所有模型都是Illuminate\Database\Eloquent\Model,这就是使它们成为 Eloquent 模型的原因,它们扩展了模型。 -
任何人,实际的错误会很好......不是你认为错误意味着什么的版本
-
这是错误:类型错误:参数 1 传递给 App\Repositories\Base\BaseRepository::__construct() 必须是 Illuminate\Database\Eleoquent\Model 的实例,App\User 的实例给定,在 C:\wamp64\www\adblog\app\Repositories\User\UserRepository.php 中调用
标签: laravel repository-pattern