1

我对 ORM 很陌生,对 MVC 有点经验,所以我想知道以下几点:

我有 ORM 模型UserOrganization.. 当我想搜索所有用户时,organization 1我执行以下操作:

$users = Model_User::query()->where('organisation_id', 1);

我应该把它直接放在控制器中还是其他地方?

4

2 回答 2

3

理想情况下,您应该在 ORM(或数据层或持久性或存储库)和控制器之间有另一层。您可以调用此服务/AppServices/BLL。

该层应该处理额外的逻辑,而您的 ORM 应该直接从映射的数据库/其他源获取数据,并且控制器应该根据用户请求调用下一层。

甲骨文:

Users GetUsers() //for all users

服务:

Users GetUsersForOrganization(int orgId) //call orm method and filter for organization id
于 2013-07-27T09:20:37.430 回答
0

当我使用 MVC 时,我总是有一个值对象 Data1 和一个映射器 Data1Mapper。ValueObject 本身用于保存数据,映射器包含以下方法:find、save、delete、fetchAll 等...

在控制器中,我实例化映射器并访问所需的方法。

例子:

class DataMapper {
    public function __construct() {
        //fetch TableDateGateway
    }

    public function find() {
        //find by identifier
    }

    public function save($data) {
        //insert or update
    }
}

class Data {
    protected $_property;

    public function getProperty() {
        return $this->_property;
    }

    public function setProperty($value) {
        $this->_property = $value;
    }
}

class Controller {
    public function indexAction() {
        $id = 1;
        $mapper = new DataMapper();
        $data = $mapper->find($id); //--> returns if found a Data-Object
    }
}
于 2013-07-27T09:16:00.560 回答