querybuilder - symfony 3.4 doctrine query
Symfony2 y Doctrine-Error: PathExpression no vĂ¡lido. Debe ser StateFieldPathExpression (3)
Está seleccionando un objeto que no está unido. Como se dijo en otra respuesta, tienes que hacer algo como:
qb->innerJoin("c.parent", "p")
Tengo una entidad que se ve así:
/**
* @Gedmo/Tree(type="nested")
* @ORM/Table(name="categories")
* @ORM/Entity()
*/
class Category extends BaseCategory
{
/**
* @ORM/OneToMany(targetEntity="Category", mappedBy="parent")
*/
protected $children;
/**
* @Gedmo/TreeParent
* @ORM/ManyToOne(targetEntity="Category", inversedBy="children")
* @ORM/JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $parent;
}
y estoy tratando de ejecutar una consulta como esta:
$qb = $this->em->createQueryBuilder()
->select(''c.parent'')
->from(''Category'', ''c'');
$result = $qb->getQuery()->getArrayResult();
Sin embargo, recibo el siguiente error:
[Semantical Error] ... Error: Invalid PathExpression. Must be a StateFieldPathExpression.
¿Cómo puedo seleccionar el campo parent_id de mi tabla? He intentado un montón de variaciones e incluso si hago algo como esto:
$qb = $this->em->createQueryBuilder()
->select(''c'')
->from(''Category'', ''c'');
Obtengo todos los campos en la tabla a excepción del parent_id. Parece que Doctrina se interpone en el camino. ¿Cómo puedo consultar este campo parent_id? o mejor aún ¿cómo puedo obtener todos los campos en la tabla incluyendo el parent_id
Puede usar la función IDENTITY
actualmente no documentada para seleccionar los ID de FK en una consulta:
SELECT IDENTITY(c.parent) ...
Solución usando createQueryBuilder:
$query->SELECT(''pa.id'')
->from(''Category'', ''ca'');
$query->join(''ca.parent'', ''pa'');
$result = $query->getQuery()->getArrayResult();