2017-12-02 101 views
0

我有一个BaseRepository类,它的方法对所有模型都有效。唯一的问题是,用户模型是从使用Illuminate \ Foundation \ Auth \ User派生而来的。所以它会抛出一个类型错误,因为构造函数需要一个Illuminate \ Database \ Eleoquent \ Model实例。我该如何解决这个问题?Laravel 5.5:用户模型上的依赖注入

这里是我的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(); 


} 


} 

这是错误:类型错误:传递给应用程序\库\基地\ BaseRepository 参数1: :__ construct()必须是一个Illuminate \ Database \ Eleoquent \ Model实例,该实例是在C:\ wamp64 \ www \ adblog \ app \ Repositories \ User \ UserRepository.ph中给出的App \ User的实例,p

+0

我想你可以与上下文结合尝试。所以当你的UserRepository类需要一个User时,你可以传递实际的用户实例。 – Camilo

+0

你是否记得你的错字?您的基类构造函数期望照明\数据库\ Eleoquent \ Model或Illuminate \ Database \ Eloquent \ Model吗? – Stefan

+0

用户模型是一个'Illuminate \ Database \ Eloquent \ Model' ......你使用的所有模型都是'Illuminate \ Database \ Eloquent \ Model',这就是使它们成为雄辩模型的原因,它们扩展了模型。 – lagbox

回答

1

自定义您的User模型这样

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Foundation\Auth\Access\Authorizable; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

class User extends Model implements 
    AuthenticatableContract, 
    AuthorizableContract, 
    CanResetPasswordContract 
{ 
    use Authenticatable, Authorizable, CanResetPassword; 
} 
+0

谢谢! 但是这是来自Illuminate \ Foundation \ Auth – sammy

+0

的内容是的,只是为了让你的用户模型扩展Eloquent \ Model而不是Illuminate \ Foundation \ Auth \ User? –

+0

但我需要认证。这工作正常。 – sammy