我不知道我还能尝试什么。
我收到了这个错误:
[语义错误]第0行,第10行'idEntrada FROM'附近:错误:无效的PathExpression。必须是StateFieldPathExpression。
这是我的疑问:
$query=$em->createQuery("SELECT mp.idEntrada FROM PAVPrimerAvisoBundle:ModeradoPor mp WHERE mp.idUsuario = $userId");
这是我的实体:
class ModeradoPor
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user", referencedColumnName="id")
*/
private $idUsuario;
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="Entrada")
* @ORM\JoinColumn(name="idEntrada", referencedColumnName="id")
*/
private $idEntrada;
/**
* @var integer
*
* @ORM\Column(name="votacio", type="integer")
*/
private $votacio;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set idUsuario
*
* @param integer $idUsuario
* @return ModeradoPor
*/
public function setIdUsuario($idUsuario)
{
$this->idUsuario = $idUsuario;
return $this;
}
/**
* Get idUsuario
*
* @return integer
*/
public function getIdUsuario()
{
return $this->idUsuario;
}
/**
* Set idEntrada
*
* @param integer $idEntrada
*/
public function setIdEntrada($idEntrada)
{
$this->idEntrada = $idEntrada;
}
/**
* Get idEntrada
*
* @return integer
*/
public function getIdEntrada()
{
return $this->idEntrada;
}
/**
* Set votacio
*
* @param integer $votacio
*/
public function setVotacio($votacio)
{
$this->votacio = $votacio;
}
/**
* Get votacio
*
* @return integer
*/
public function getVotacio()
{
return $this->votacio;
}
如果我执行此查询:
$query=$em->createQuery("SELECT mp FROM PAVPrimerAvisoBundle:ModeradoPor mp WHERE mp.idUsuario = $userId");
或者
$query=$em->createQuery("SELECT mp.id FROM PAVPrimerAvisoBundle:ModeradoPor mp WHERE mp.idUsuario = $userId");
完美无缺。这只是mp.idEntrada。
我的实体中是否有拼写错误?
修改:mp.idUsuario.
修改
例如,我转储mysql查询,它显示如下(当SELECT mp
)
SELECT m0_.id AS id0, m0_.votacio AS votacio1, m0_.user AS user2, m0_.entrada_id AS entrada_id3 FROM ModeradoPor m0_ WHERE m0_.user = 5
我也可以做SELECT mp.id
但绝不是mp.idEntrada / mp.idUser
答案 0 :(得分:9)
SELECT IDENTITY (mp.entrada)FROM PAVPrimerAvisoBundle:ModeradoPor mp WHERE mp.idUsuario = $userId
这解决了这个问题。请注意"IDENTITY"
答案 1 :(得分:1)
您需要使用实体FK定义来获取PK字段(属性)。
示例:
我有一个实体:
documentoDocumento(文件之间有关系的实体)
documento(带有document_Type_Id FK的文档信息)
documentTipo(带有document_type_id的引用实体 - >(我的目标!!))
在documentDocument实体中:
/**
* @var Documento
*
* @ManyToOne(targetEntity="Documento")
* @JoinColumns({
* @JoinColumn(name="documento2_id", referencedColumnName="id")
* })
*/
private $documento2;
在文件实体中:
/**
* @var DocumentoTipo
*
* @ManyToOne(targetEntity="DocumentoTipo")
* @JoinColumns({
* @JoinColumn(name="documento_tipo_id", referencedColumnName="id")
* })
*/
private $documentoTipo;
IN TABLES
[DocumentoDocumento] -- table with some type of relations between documents
* id pk
- documento1_id fk
- documento2_id fk
[Documento]
*id pk
-documento_tipo fk -- type of document
- blablabla
[DocumentoTipo]
*id pk
-tipo -- type description
************************
我想从DocumentoDocumento中选择一个数据并从DocumentoTipo中显示tipo。
这会返回错误:
$qb3 = $this->_em->createQueryBuilder();
$qb3->select('dd.id, dd.documento, d2.contenidoTipo')
->from('Mnc\Entity\DocumentoDocumento', 'dd') // select from DocumentoDocumento
->innerJoin('dd.documento2','d2' ); // join to 'd2'
但是:
$qb3 = $this->_em->createQueryBuilder();
$qb3->select('dd.id, dd.documento, dt2.tipo documentoTipo, dt2.id documentoTipoId')
->from('Mnc\Entity\DocumentoDocumento', 'dd') // select from DocumentoDocumento
->innerJoin('dd.documento2','d2' ) // join to 'd2'
->innerJoin('d2.documentoTipo', 'dt2'); // join FK in d2 to dt2
我得到一个带有别名'documentoTipoId'的dt2.id。