我正在使用 bjyauthorize 为我的 zf2 项目使用 zfcuser 学说模块,它工作得很好。现在我想从我的用户实体中获取连接的国家实体
在 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() 方法获取该国家/地区实体。
也许这是导致学说实体反序列化和序列化到会话中的原因。我检查了有关如何将实体保存到会话中的学说文档。但我想保留会话中的所有子实体,所以在我的情况下,我在会话中有一个订单实体,其中包含多个包实体。每个包裹实体都有一个用户和多个项目实体。从会话中获取订单实体时,我希望能够访问所有这些元素。
我什至尝试对会话中的每个用户进行合并,例如:
foreach($participants as $participant) {
$participant = $em->merge($participant);
}
但这并没有改变任何事情。甚至整个订单的合并也不成功。
您是否知道如何从会话中恢复具有完整学说特征的学说实体?