在哪里使用ORM模型和MVC放置搜索逻辑?

时间:2013-07-27 09:13:36

标签: php orm fuelphp

我对ORM很新,而且对MVC有一点经验,所以我想知道以下内容:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

ORM:

Users GetUsers() //for all users

服务:

Users GetUsersForOrganization(int orgId) //call orm method and filter for organization id

答案 1 :(得分:0)

当我使用MVC时,我总是有一个Value Object Data1和一个mapper Data1Mapper。 ValueObject本身用于保存数据,mapper包含以下方法: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
    }
}