Php 如果DataMapper仅用于数据传输/交换,则在何处实例化集合的对象?

Php 如果DataMapper仅用于数据传输/交换,则在何处实例化集合的对象?,php,oop,model-view-controller,Php,Oop,Model View Controller,因为DataMapper应该用于对象和关系数据库之间的数据交换/传输,所以我会得到这样一个用户 $user = $this->entityFactory->build('User'); $userMapper = $this->mapperFactory->build('User'); $user->setId(43); $userMapper->fetch($user); 这很好,因为我可以在映射器之外创建User对象并将其传入,但是当我获取对象集合/列

因为DataMapper应该用于对象和关系数据库之间的数据交换/传输,所以我会得到这样一个用户

$user = $this->entityFactory->build('User');
$userMapper = $this->mapperFactory->build('User');

$user->setId(43);
$userMapper->fetch($user);
这很好,因为我可以在映射器之外创建
User
对象并将其传入,但是当我获取对象集合/列表时,我该怎么做

首先在mapper之外创建空对象似乎不正确,并且肯定会导致一些问题,那么最好的方法是什么呢


谢谢。

我不知道你是否还记得这个问题,不过让我给你一个答案。原则上,第一步是相同的

$userCollection = $this->entityFactory->build('UserCollection');
$userCollectionMapper = $this->mapperFactory->build('UserCollection');
$user = $this->entityFactory->build('User');
$user->setId(43);
$userCollection->add($user);
$userCollectionMapper->fetch($userCollection);
因此,userObject将在这里作为collectionMapper的searchObject(就像teresko在旧线程中提出的那样)。您的CollectionMapper将从数据库检索数据,我更喜欢使用

//returns new User object
$newUser = $userCollection->newUser();
//populate user object with DB entry
$userCollectionMapper->populate($newUser,$DBresponse);
//add to collection
$userCollection->add($newUser);
当然,在通过数据库中找到的行进行循环之前会有一个循环,在添加结果之前必须清除用户对象列表。
这就是我处理问题的方法。希望能有帮助。

你是说有点像描述的那样?此外,有两种实现映射器的通用方法:简单(朴素?)方法,将域对象注入映射器,以及将DAO同时注入映射器和域对象,然后处理信息交换的结构。