首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注意:尝试在vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php第481行中获取非对象的属性。

注意:尝试在vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php第481行中获取非对象的属性。
EN

Stack Overflow用户
提问于 2013-06-26 08:52:39
回答 2查看 1.8K关注 0票数 0

我有一个非常奇怪的案例,涉及到教义、争论(DoctrineExtension)和听众。

我将解释我在这里和下面的情况是所有的代码,我认为是与问题有关。

我有两个实体(协议和模板),其中协议是基于特定的模板版本。模板实体具有DoctrineExtension Loggable注释。因此,我可以使用LogEntryRepository-> revert ()方法将一个协议模板还原到特定的版本。(我使用一个postLoad侦听器来完成这个任务,因此每次检索协议时,都会为该协议加载正确的模板版本)。

如果我得到一个控制器操作,其中使用ParamConververter注释检索协议,则一切正常,并且使用正确的模板检索我的协议。如果我试图使用查询生成器在控制器操作的第一行中检索完全相同的协议,则会得到以下异常

代码语言:javascript
复制
 Notice: Trying to get property of non-object in /home/administrator{dir}/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php line 481 

任何帮助都将不胜感激。谢谢。

只需复制与问题相关的部分:

实体

代码语言:javascript
复制
/**
 * Agreement
 *
 * @ORM\Table(name="agreement")
 * @ORM\Entity
 * @Gedmo\Loggable
 */
class Agreement
{   
    /**
     * @var integer
     * @ORM\Column(name="id", type="bigint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer
     * @ORM\Column(name="template_version", type="bigint", nullable=false)
     * @Gedmo\Versioned
     */
    private $templateVersion;

    /**
     * @var \Template
     * @ORM\ManyToOne(targetEntity="Template")
     * @ORM\JoinColumn(name="template_id", referencedColumnName="id")
     */
    private $template;
}


/*
 * Template
 *
 * @ORM\Table(name="template")
 * @ORM\Entity
 * @ORM\ChangeTrackingPolicy("DEFERRED_EXPLICIT")
 * @Gedmo\Loggable
 */
class Template
{
    /**
     * @var integer
     * @ORM\Column(name="id", type="bigint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     * @Gedmo\Versioned
     */
    private $name;
}

原则订户

代码语言:javascript
复制
*(services.yml)*
services:
    ourdeal.listener.loggable:
        class: App\Bundle\Listener\LoggableSubscriber
        tags:
            - { name: doctrine.event_subscriber }

class LoggableSubscriber implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return array(
            'prePersist',
            'postLoad',
        );
    }

    public function prePersist(LifecycleEventArgs $args)
        *...Code omitted...*

    public function postLoad(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        $entityManager = $args->getEntityManager();

        if ($entity instanceof Agreement)
        {
            $agreement = $entity;
            $repo = $entityManager->getRepository('Gedmo\Loggable\Entity\LogEntry');
            $repo->revert($agreement->getTemplate(), $agreement->getTemplateVersion());
        }
    }
}

Actions

有了这个行动,我就能毫无问题地达成期望的协议。

代码语言:javascript
复制
    /**
     * @Route("/agreement/send/{id}", name="agreement/send")
     * @ParamConverter("agreement", class="Bundle:Agreement")
     * @Template()
     */
    public function sendAction(Request $request, Agreement $agreement) {
        *...Code omitted...*
    }

使用这段代码,我得到了异常(硬编码的id和这段代码只是为了测试)。

代码语言:javascript
复制
    /**
     * @Route("/agreement/send", name="agreement/send")
     * @Template()
     */
    public function sendAction(Request $request) {
        $em = $this->get('doctrine')->getManager();
        $qb = $em->createQueryBuilder()->select('a')->from('AppBundle:Agreement', 'a')->where('a.id=1378');
        $agreements = $qb->getQuery()->getResult();
    }
EN

回答 2

Stack Overflow用户

发布于 2013-06-26 08:58:12

使用setParameter()

代码语言:javascript
复制
$em->createQueryBuilder()
    ->select('a')
    ->from('AppBundle:Agreement', 'a')
    ->where('a.id = :id')
    ->setParameter('id', $request->get('id'));
票数 0
EN

Stack Overflow用户

发布于 2013-08-27 07:01:28

有一个已知的bug #52083会影响5.3.4之前的PHP,它会随机失败,“注意:试图获取非对象的属性”。

如果是这样的话,尝试升级PHP将解决您的问题。希望这有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17315570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档