我的存储库中有以下查询:
public function findHistoryForSub($snummer=1)
{
$query = $this->createQueryBuilder( 'oh' )
->select( 'oh.id, oh.objektnummer, oh.idSubunternehmer, oh.datum, oh.typ, oh.outbox' )
->innerJoin( 'oh.objekt', 'o', 'WITH', 'o.objektnummer = oh.objektnummer AND o.idSubunternehmer = oh.idSubunternehmer' )
->innerJoin( 'oh.subunternehmer', 's', 'WITH', 's.subunternehmernummer = o.idSubunternehmer' )
->innerJoin( 's.subunternehmerUser', 'su', 'WITH', 'su.idSubunternehmer = s.subunternehmernummer' )
->where('su.idUser = :id')
->setParameter('id', $snummer);
$querynew = $query->getQuery();
/* This is the result, when I print $query->getQuery()->getDQL()
SELECT oh.id, oh.objektnummer, oh.idSubunternehmer, oh.datum, oh.typ, oh.outbox
FROM MBS\AllgemeinBundle\Entity\ObjektHistory oh
INNER JOIN MBSAllgemeinBundle:Objekt o WITH o.objektnummer = oh.objektnummer AND o.idSubunternehmer = oh.idSubunternehmer
INNER JOIN MBSAllgemeinBundle:Subunternehmer s WITH s.subunternehmernummer = o.idSubunternehmer
INNER JOIN MBSAllgemeinBundle:SubunternehmerUser su WITH su.idSubunternehmer = s.subunternehmernummer
WHERE su.idUser = :id
*/
return $querynew->getResult();
}
在我的Controller中,我调用存储库
public function indexAction()
{
$securityContext = $this->container->get( 'security.context' );
if( $securityContext->isGranted( 'IS_AUTHENTICATED_FULLY' ) )
{
$em = $this->getDoctrine()->getManager();
$objektHistoryRepo = $em->getRepository( 'MBSAllgemeinBundle:ObjektHistory' )
->findHistoryForSub();
return $this->render(
'MBSAllgemeinBundle:Default:index.html.twig',
array(
"History" => $objektHistoryRepo
)
);
}
else
{
return $this->redirect($this->generateUrl('fos_user_security_login'));
}
}
但是我收到了错误
[Semantical Error] line 0, col 17 near 'objektnummer,':
Error: Invalid PathExpression. Must be a StateFieldPathExpression.
有人知道,我写错了哪一部分? 或者我的查询中有错误吗?
错误:类MBS \ AllgemeinBundle \ Entity \ ObjektHistory没有名为objekt的关联
但我必须在我的ObjektHistory Entitiy中执行此操作吗?
namespace MBS\AllgemeinBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* ObjektHistory
*/
class ObjektHistory
{
/**
* @var \DateTime
*/
private $datum;
/**
* @var boolean
*/
private $typ;
/**
* @var boolean
*/
private $outbox;
/**
* @var integer $uid
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
*/
private $id;
/**
* @var \MBS\AllgemeinBundle\Entity\Objekt
*/
private $idSubunternehmer;
/**
* @var \MBS\AllgemeinBundle\Entity\Objekt
*/
private $objektnummer;
/**
* Set datum
*
* @param \DateTime $datum
* @return ObjektHistory
*/
public function setDatum($datum)
{
$this->datum = $datum;
return $this;
}
/**
* Get datum
*
* @return \DateTime
*/
public function getDatum()
{
return $this->datum;
}
/**
* Set typ
*
* @param boolean $typ
* @return ObjektHistory
*/
public function setTyp($typ)
{
$this->typ = $typ;
return $this;
}
/**
* Get typ
*
* @return boolean
*/
public function getTyp()
{
return $this->typ;
}
/**
* Set outbox
*
* @param boolean $outbox
* @return ObjektHistory
*/
public function setOutbox($outbox)
{
$this->outbox = $outbox;
return $this;
}
/**
* Get outbox
*
* @return boolean
*/
public function getOutbox()
{
return $this->outbox;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set idSubunternehmer
*
* @param \MBS\AllgemeinBundle\Entity\Objekt $idSubunternehmer
* @return ObjektHistory
*/
public function setIdSubunternehmer(\MBS\AllgemeinBundle\Entity\Objekt $idSubunternehmer = null)
{
$this->idSubunternehmer = $idSubunternehmer;
return $this;
}
/**
* Get idSubunternehmer
*
* @return \MBS\AllgemeinBundle\Entity\Objekt
*/
public function getIdSubunternehmer()
{
return $this->idSubunternehmer;
}
/**
* Set objektnummer
*
* @param \MBS\AllgemeinBundle\Entity\Objekt $objektnummer
* @return ObjektHistory
*/
public function setObjektnummer(\MBS\AllgemeinBundle\Entity\Objekt $objektnummer = null)
{
$this->objektnummer = $objektnummer;
return $this;
}
/**
* Get objektnummer
*
* @return \MBS\AllgemeinBundle\Entity\Objekt
*/
public function getObjektnummer()
{
return $this->objektnummer;
}
}
答案 0 :(得分:1)
我认为你应该做这样的事情
->innerJoin( 'oh.object', 'o', 'WITH', 'o.objektnummer = oh.objektnummer AND o.idSubunternehmer = oh.idSubunternehmer' )
->innerJoin( 'oh.subunternehmer', 's', 'WITH', 's.subunternehmernummer = o.idSubunternehmer' )
->innerJoin( 's.subunternehmerUser', 'su', 'WITH', 'su.idSubunternehmer = s.subunternehmernummer' )
此外,您应该确保定义了所有实体关联