我对 ORM 很陌生,对 MVC 有点经验,所以我想知道以下几点:
我有 ORM 模型User
,Organization
.. 当我想搜索所有用户时,organization 1
我执行以下操作:
$users = Model_User::query()->where('organisation_id', 1);
我应该把它直接放在控制器中还是其他地方?
理想情况下,您应该在 ORM(或数据层或持久性或存储库)和控制器之间有另一层。您可以调用此服务/AppServices/BLL。
该层应该处理额外的逻辑,而您的 ORM 应该直接从映射的数据库/其他源获取数据,并且控制器应该根据用户请求调用下一层。
甲骨文:
Users GetUsers() //for all users
服务:
Users GetUsersForOrganization(int orgId) //call orm method and filter for organization id
当我使用 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
}
}