由于DataMapper应该用于对象和关系数据库之间的数据交换/传输,所以我会得到这样的用户
$user = $this->entityFactory->build('User');
$userMapper = $this->mapperFactory->build('User');
$user->setId(43);
$userMapper->fetch($user);
这很好,因为我可以在映射器之外创建User
对象并将其传递进去,但是当我获得对象的集合/列表时,我该怎么办?
首先在映射器之外创建空对象似乎不正确,并且肯定会导致一些问题,所以最好的方法是什么?
谢谢。
我不知道这个问题是否还在你的脑海里,但是让我给你一个答案。原则上,第一步是相同的
$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);
当然,在此之前会有一个循环,遍历数据库中找到的行,并且必须在添加结果之前清除用户对象列表。这就是我处理这个问题的方法。