我有两个类似的模型:WebStore和LocalStore。用户通过多态关系与一个商店相关联。我想创建一个StoreRepository,它将类名称(模型名称在用户下保存为userable_type)作为参数,然后将其保存到$ model属性。
最后我称之为Stocker:
$repo = new StoreRepository(Auth::user()->userable_type, Auth::user()->location->id);
$stocker = new \App\Entities\Stocker\Stocker($repo);
位置返回“App \ Models \ WebStore”或“App \ Models \ LocalStore”。然后我在StoreRepo构造函数中稍后将其保存到locationModel,并在模型()函数(来自存储库的抽象函数)下,将$ this->模型设置为等于它。
我有一个Stocker服务/实体:
class Stocker {
protected $repo;
public function __construct(StoreRepositoryInterface $repo) {
$this->repo = $repo;
}
public function saleProducts() {
return $this->repo->onSale()
}
}
我有一个StoreRepository
class StoreRepository extends Repository implements StoreRepositoryInterface
{
public $locationModel;
public $id;
public function __construct($locationModel, $id = null) {
$this->locationModel = $locationModel;
$this->id = $id;
}
public function model()
{
return $this->locationModel;
}
public function onSale($id) {
$location = $this->model->findBy($id);
}
}
然后我有一个存储库:
abstract class Repository implements RepositoryInterface {
/**
* @var App
*/
private $app;
/**
* @var
*/
protected $model;
/**
* @param App $app
* @throws \Bosnadev\Repositories\Exceptions\RepositoryException
*/
public function __construct(App $app) {
$this->app = $app;
$this->makeModel();
}
/**
* Specify Model class name
*
* @return mixed
*/
abstract function model();
public function find($id, $columns = array('*')) {
return $this->model->find($id, $columns);
}
public function makeModel() {
$model = $this->app->make($this->model());
return $this->model = $model->newQuery();
}
}
基本上,每次我尝试从Repositry调用一个Eloquent函数时,我都会
Symfony\Component\Debug\Exception\FatalErrorException]
Call to a member function find() on null
我认为这与我在StoreRep构造函数中传递模型名称的方式有关。如何在一个存储库中使用两个模型的任何建议将不胜感激。
由于
编辑:不言而喻,但我是Repositories的新手,如果这个愚蠢,我会接受其他建议来处理两个非常相似且沉重嵌入网站的模型,就好像它们是一个一样。