【问题标题】:doctrine query builder throwing a [Semantical Error]教义查询生成器抛出 [语义错误]
【发布时间】:2012-08-24 15:35:03
【问题描述】:

我在使用学说查询生成器时遇到问题,向我抛出 [语义错误] 我正在尝试构建的查询是这样的:-

   $query = $this->_em->createQueryBuilder()
       ->select('r, m')
       ->from('Ajfit\Entity\TicketReply', 'r')
       ->join('r.mailFk', 'm')
       ->where('r.ticketFk = :ticket')
       ->orderBy('m.dt', 'desc')
       ->setParameter('ticket', $ticket)
       ->getQuery();

    $paginator =  new Paginator($query);
    return $paginator->getIterator(); //////////blows up here!

抛出的错误是:-

  [Semantical Error] line 0, col 64 near 'm WHERE r.ticketFk': Error: Class Ajfit\Entity\TicketReply has no association named mailFk 

错误所指的实体是:-

命名空间 Ajfit\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Persistence\PersistentObject;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Ajfit\Entity\TicketReply
 *
 * @ORM\Table(name="ticket_reply")
 * @ORM\Entity(repositoryClass="Ajfit\Repository\TicketReply")
 * @ORM\HasLifecycleCallbacks
 */
 class TicketReply extends \Doctrine\Common\Persistence\PersistentObject
 {
    /**
     * @ORM\Id
     * @ORM\Column(name="mail_fk", type="integer")
     * @ORM\ManyToOne(targetEntity="Ajfit\Entity\Mail", inversedBy="replies")
     * @ORM\JoinColumn(name="mail_fk", referencedColumnName="pk")
     */
    protected $mailFk;

    /**
     * @ORM\Id
     *  @ORM\Column(name="ticket_fk", type="integer")
     * @ORM\ManyToOne(targetEntity="Ajfit\Entity\Ticket", inversedBy="replies")
     * @ORM\JoinColumn(name="ticket_fk", referencedColumnName="pk")
     */
    protected $ticketFk;

   /**
    * @var integer $rating
    *
    * @ORM\Column(name="rating", type="integer")
    */
    protected $rating;

 }

由于 TicketReply 实体没有 mailFk 关联的错误详细信息,但是它确实存在,我编写查询构建器的原因是否存在问题?

谢谢安德鲁

【问题讨论】:

    标签: php zend-framework doctrine-orm


    【解决方案1】:

    您的$mailFk 有一个Column 和一个ManyToOne 注释。列注释不能用于存储关系。 Doctrine 似乎选择使用 Column 注释而不是 ManyToOne

    去掉@ORM\Column注解:

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Ajfit\Entity\Mail", inversedBy="replies")
     * @ORM\JoinColumn(name="mail_fk", referencedColumnName="pk")
     */
    protected $mailFk;
    

    $ticketFk做同样的事情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 2016-07-01
      相关资源
      最近更新 更多