多个模型的一个存储库

时间:2015-12-04 21:08:51

标签: php laravel laravel-5 eloquent

我有两个类似的模型: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的新手,如果这个愚蠢,我会接受其他建议来处理两个非常相似且沉重嵌入网站的模型,就好像它们是一个一样。

0 个答案:

没有答案