我对ORM很新,而且对MVC有一点经验,所以我想知道以下内容:
我有ORM模型User
,Organization
..当我想搜索organization 1
中的所有用户时,我会执行以下操作:
$users = Model_User::query()->where('organisation_id', 1);
应该我只是把它直接放在控制器或其他地方?
答案 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
}
}