【发布时间】:2015-05-18 22:31:40
【问题描述】:
我在我的 zf2 项目中使用 zfcuser 学说模块和 bjyauthorize,它工作得很好。现在我想从我的用户实体中获取连接的国家实体
在 User.php 中:
/**
* An example of how to implement a role aware user entity.
*
* @ORM\Entity
* @ORM\Table(name="users", indexes={
* @ORM\Index(name="fk_User_Country1_idx", columns={"Country_id"}),
* }, uniqueConstraints={@ORM\UniqueConstraint(name="email_UNIQUE", columns={"email"})})
* @ORM\HasLifecycleCallbacks()
*/
class User implements UserInterface, ProviderInterface
{
...
/**
* @var ersEntity\Country
* @ORM\ManyToOne(targetEntity="Country", inversedBy="users")
* @ORM\JoinColumn(name="Country_id", referencedColumnName="id")
*/
protected $country;
在 Country.php 中
/**
* Entity\Country
*
* @ORM\Entity()
* @ORM\Table(name="Country")
* @ORM\HasLifecycleCallbacks()
*/
class Country implements InputFilterAwareInterface
{
...
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="country")
* @ORM\JoinColumn(name="id", referencedColumnName="Country_id")
*/
protected $users;
我的一个控制器中的一个简单的 testAction 失败了:
$user = $em->getRepository("ersEntity\Entity\User")
->findOneBy(array('id' => 1));
error_log($user->getFirstname().' '.$user->getSurname());
error_log('country: '.$user->getCountry()->getName());
导致:
[Tue May 19 00:02:44 2015] [error] [client 185.17.207.16] Andi N.
[Tue May 19 00:02:44 2015] [error] [client 185.17.207.16] PHP Fatal error: Call to a member function getName() on a non-object in /home/ers/www/ers/module/Admin/src/Admin/Controller/TestController.php on line 172
我想知道为什么不能从 User 实体中获取 Country 实体。对于同一项目中的其他实体,这可以正常工作。
谁能告诉我需要做什么才能让 Country 实体脱离这个 zfcuser-bjyauthorize-doctrine 用户实体?
有关更多代码信息,整个项目可在开发分支的https://github.com/inbaz/ers 获得。
编辑:
对于未设置国家/地区的用户,肯定会出现错误。有必要检查一个国家是否存在是对的。但是这个用户有一个国家集。我通过 phpmyadmin 进行了检查。无法通过 getCountry() 方法获取该国家/地区实体。
这可能是导致将条令实体反序列化和序列化到会话中的原因。我检查了doctrine documentation,了解如何将实体保存到会话中。但我想将所有子实体保留在会话中,所以在我的情况下,我在会话中有一个订单实体,其中包含多个包实体。每个包裹实体都有一个用户和多个项目实体。从会话中获取订单实体时,我希望能够访问所有这些元素。
我什至尝试对会话中的每个用户进行合并,例如:
foreach($participants as $participant) {
$participant = $em->merge($participant);
}
但这不会改变任何事情。甚至整个订单的合并都不成功。
您对如何从会话中恢复具有完整学说功能的学说实体有任何想法吗?
【问题讨论】:
标签: php doctrine-orm zend-framework2 zfcuser bjyauthorize