所以,我们有两个实体。一个有存储库,另一个没有。当我们尝试从另一个表中获取数据时,我们将获得ArrayCollection数据。问题是如何调用这个实体存储库方法?这是真的吗?
示例:
$system = $this
->getDoctrine()
->getEntityManager()
->getRepository('SomeBundle:FirstEntity')
->findOneByColumnID($id);
$den = $system->getDataFromSecondTable(); // ArrayCollection of SecondEntity
然后我想用某种方式:
$den[0]->functionFromSecondEntityRepository();
因此,方法“functionFromSecondEntityRepository”在类SecondEntity的Repository中,我无法调用它 - 未定义的方法调用错误“functionFromSecondEntityRepository”。
那我怎么能以正确的方式做到这一点?
答案 0 :(得分:1)
你没有提供太多细节,所以我会在这里做一些例子。
假设您与实体FriendsList
有实体Friend
和One-to-Many
关系。
$List = $this->getDoctrine()
->getEntityManager()
->getRepository('SomeBundle:FriendsList')
->find($id);
// The list you pulled in by ID can now be used
$List->getId();
foreach($List->getFriends() as $Friend)
{
// Each friend will be output here, you have access
// to the Friend methods now for each.
$Friend->getId();
$Friend->getFirstName();
$Friend->getLastName();
$Friend->getDOB();
$Friend->getFavoriteColor();
}
默认情况下,在创建关系时会创建一个获取集合的方法,在此示例中为getFriends
,它返回一个实体数组。生成实体后,请查看实体模型以查看可用的方法。默认情况下,为实体中的每个属性创建一个,为集合创建其他属性。
SomeCool/Bundle/Entity/FriendsList
Somecool/Bundle/Entity/Friend
以下是使用YAML配置时的一对多关系。
SomeCool\Bundle\Entity\FriendsList:
type: entity
table: null
oneToMany:
friend:
targetEntity: Friend
mappedBy: friendslist
cascade: ["persist"]
SomeCool/Bundle/Entity/Friend
manytoOne:
friends:
targetEntity: FriendsList
mappedBy: friend
cascade: ["persist"]
访问存储库
YAML配置(services.yml)
somebundle.bundle.model.friends:
class: SomeBundle/Bundle/Model/Friends
arguments: [@doctrine.orm.entity_manager]
在控制器上
$friendsModel = $this->get('somebundle.bundle.model.friends');
$Friends = $friendsModel->findByFirstName('Bobby');
foreach($Friends as $Friend)
{
$Friend->getLastName();
}
答案 1 :(得分:0)
实体中没有存储库方法。你需要在AnotherEntity中使用一个函数来获取ArrayCollection。 IE:
class FirstEntity {
public function getAnotherEntity()
{
return $this->anotherEntity;
}
}
class AnotherEntity
{
public function getArrayCollection()
{
return $this->myArrayCollection;
}
}
$firstEntity->getAnotherEntity()->getArrayCollection();
另一个选择是根据第一个结果得到AnotherEntity的存储库:
$system = $this
->getDoctrine()
->getEntityManager()
->getRepository('SomeBundle:SomeEntity')
->findOneByColumnID($id);
$anotherEntity = $system->getAnotherEntity();
$anotherEntityResult = $this->getDoctrine()
->getRepository(get_class($anotherEntity))
->functionFromAnotherEntityRepository($anotherEntity->getId());
如果使用第二个解决方案,我会在尝试检索存储库之前确保$ anotherEntity不为null。