完全错误
CRITICAL - Uncaught PHP Exception Twig_Error_Runtime: "An exception has been thrown during the rendering of a template ("[Semantical Error] line 0, col 170 near 'imagenes WHERE': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.") in "WORK2WORKSitioExperienceBackendBundle:ExpPromociones:new.html.twig" at line 40." at C:\xampp\htdocs\WORK-universos\app\cache\universos_dev\classes.php line 4440
我有两个查询来选择A中所有不在B中的元素,但是我无法将其翻译为学说
SELECT *
FROM beneficioWORK.imagenes im
LEFT JOIN beneficioWORK.imagenes_x_exppromociones impro
ON im.id=impro.id_imagen
where impro.id_imagen is null;
OR
select *
from beneficioWORK.imagenes a
where a.id
NOT IN (
SELECT id_imagen
FROM beneficioWORK.imagenes_x_exppromociones
);
在学说上,我试图做这样的事情,但是我得到了一个错误Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected."
这是我的代码:
$imagenes = $em->createQueryBuilder()
->select('img')
->addSelect('img_pro')
->from('WORK2WORKSitioUniversosImagenesBundle:Imagenes', 'img')
->leftjoin('WORK2WORKSitioExperienceFrontendBundle:Exppromociones', 'img_pro', 'WITH', 'img.id=img_pro.imagenes')
->where('img_pro.imagenes is null')
->getQuery()
->getResult();
我有一个实体,即Exppromociones.php 这是我实体的一部分,我想这就是您所需要的,因为它真的很长
<?php
namespace WORK2\WORK\SitioExperience\FrontendBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Exppromociones
*/
class Exppromociones
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $nombre;
/**
* @var string
*/
private $descripcion;
/**
* @var integer
*/
private $puntos;
/**
* @var \DateTime
*/
private $fechaInicio;
/**
* @var \DateTime
*/
private $fechaFin;
/**
* @var boolean
*/
private $enPromocion;
/**
* @var string
*/
private $vigenciaDescripcion;
/**
* @var string
*/
private $miniDescripcion;
/**
* @var integer
*/
private $puntosOtros;
/**
* @var string
*/
private $flujoCanje;
/**
* @var \WORK2\WORK\SitioExperience\FrontendBundle\Entity\ExpCategorias
*/
private $categoria;
/**
* @var \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes
*/
private $banner;
/**
* @var \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes
*/
private $imagen;
/**
* @var \WORK2\WORK\SitioExperience\FrontendBundle\Entity\expcomercios
*/
private $comercio;
/**
* @var string
*
* @ORM\Column(name="Nombre_Real", type="text")
*/
private $nombreReal;
/**
* @var string
*
* @ORM\Column(name="Descripcion_Experience", type="text")
*/
private $descripcionExperience;
/**
* @var boolean
*/
private $destacado = false;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $imagenes;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $categorias;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $etiquetas;
/**
* @var \DateTime
*/
private $fechaFinNovedad;
/**
* @var integer
*/
private $cantidadVista = 0;
/**
* @var integer
*/
private $cantidadCanjeada = 0;
/**
* @var integer
*/
private $valorGuaranies = 0;
/**
* @var integer
*/
private $puntosTelefonico;
/**
* @var string
*/
private $texto_circulo;
/**
* @var boolean
*/
private $mostrarValorGuaranies;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nombre
*
* @param string $nombre
* @return Exppromociones
*/
public function setNombre($nombre)
{
$this->nombre = $nombre;
return $this;
}
/**
* Get nombre
*
* @return string
*/
public function getNombre()
{
return $this->nombre;
}
/**
* Set descripcion
*
* @param string $descripcion
* @return Exppromociones
*/
public function setDescripcion($descripcion)
{
$this->descripcion = $descripcion;
return $this;
}
/**
* Get descripcion
*
* @return string
*/
public function getDescripcion()
{
return $this->descripcion;
}
/**
* Set puntos
*
* @param integer $puntos
* @return Exppromociones
*/
public function setPuntos($puntos)
{
$this->puntos = $puntos;
return $this;
}
/**
* Get puntos
*
* @return integer
*/
public function getPuntos()
{
return $this->puntos;
}
/**
* Set fechaInicio
*
* @param \DateTime $fechaInicio
* @return Exppromociones
*/
public function setFechaInicio($fechaInicio)
{
$this->fechaInicio = $fechaInicio;
return $this;
}
/**
* Get fechaInicio
*
* @return \DateTime
*/
public function getFechaInicio()
{
return $this->fechaInicio;
}
/**
* Set fechaFin
*
* @param \DateTime $fechaFin
* @return Exppromociones
*/
public function setFechaFin($fechaFin)
{
$this->fechaFin = $fechaFin;
return $this;
}
/**
* Get fechaFin
*
* @return \DateTime
*/
public function getFechaFin()
{
return $this->fechaFin;
}
/**
* Set enPromocion
*
* @param boolean $enPromocion
* @return Exppromociones
*/
public function setEnPromocion($enPromocion)
{
$this->enPromocion = $enPromocion;
return $this;
}
/**
* Get enPromocion
*
* @return boolean
*/
public function getEnPromocion()
{
return $this->enPromocion;
}
/**
* Set vigenciaDescripcion
*
* @param string $vigenciaDescripcion
* @return Exppromociones
*/
public function setVigenciaDescripcion($vigenciaDescripcion)
{
$this->vigenciaDescripcion = $vigenciaDescripcion;
return $this;
}
/**
* Get vigenciaDescripcion
*
* @return string
*/
public function getVigenciaDescripcion()
{
return $this->vigenciaDescripcion;
}
/**
* Set miniDescripcion
*
* @param string $miniDescripcion
* @return Exppromociones
*/
public function setMiniDescripcion($miniDescripcion)
{
$this->miniDescripcion = $miniDescripcion;
return $this;
}
/**
* Get miniDescripcion
*
* @return string
*/
public function getMiniDescripcion()
{
return $this->miniDescripcion;
}
/**
* Set puntosOtros
*
* @param integer $puntosOtros
* @return Exppromociones
*/
public function setPuntosOtros($puntosOtros)
{
$this->puntosOtros = $puntosOtros;
return $this;
}
/**
* Get puntosOtros
*
* @return integer
*/
public function getPuntosOtros()
{
return $this->puntosOtros;
}
/**
* Set flujoCanje
*
* @param string $flujoCanje
* @return Exppromociones
*/
public function setFlujoCanje($flujoCanje)
{
$this->flujoCanje = $flujoCanje;
return $this;
}
/**
* Get flujoCanje
*
* @return string
*/
public function getFlujoCanje()
{
return $this->flujoCanje;
}
/**
* Set categoria
*
* @param \WORK2\WORK\SitioExperience\FrontendBundle\Entity\ExpCategorias $categoria
* @return Exppromociones
*/
public function setCategoria(\WORK2\WORK\SitioExperience\FrontendBundle\Entity\ExpCategorias $categoria = null)
{
$this->categoria = $categoria;
return $this;
}
/**
* Get categoria
*
* @return \WORK2\WORK\SitioExperience\FrontendBundle\Entity\ExpCategorias
*/
public function getCategoria()
{
return $this->categoria;
}
/**
* Set banner
*
* @param \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $banner
* @return Exppromociones
*/
public function setBanner(\WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $banner = null)
{
$this->banner = $banner;
return $this;
}
/**
* Get banner
*
* @return \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes
*/
public function getBanner()
{
return $this->banner;
}
/**
* Set imagen
*
* @param \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $imagen
* @return Exppromociones
*/
public function setImagen(\WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $imagen = null)
{
$this->imagen = $imagen;
return $this;
}
/**
* Get imagen
*
* @return \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes
*/
public function getImagen()
{
return $this->imagen;
}
/**
* Set comercio
*
* @param \WORK2\WORK\SitioExperience\FrontendBundle\Entity\expcomercios $comercio
* @return Exppromociones
*/
public function setComercio(\WORK2\WORK\SitioExperience\FrontendBundle\Entity\expcomercios $comercio = null)
{
$this->comercio = $comercio;
return $this;
}
/**
* Get comercio
*
* @return \WORK2\WORK\SitioExperience\FrontendBundle\Entity\expcomercios
*/
public function getComercio()
{
return $this->comercio;
}
/**
* Set nombreReal
*
* @param string $nombreReal
* @return ExpPromociones
*/
public function setNombreReal($nombreReal)
{
$this->nombreReal = $nombreReal;
return $this;
}
/**
* Get nombreReal
*
* @return string
*/
public function getNombreReal()
{
return $this->nombreReal;
}
/**
* Set descripcionExperience
*
* @param string $descripcionExperience
* @return ExpPromociones
*/
public function setDescripcionExperience($descripcionExperience)
{
$this->descripcionExperience = $descripcionExperience;
return $this;
}
/**
* Get descripcionExperience
*
* @return string
*/
public function getDescripcionExperience()
{
return $this->descripcionExperience;
}
/**
* @var integer
*/
private $orden = 0;
/**
* Set orden
*
* @param integer $orden
* @return Exppromociones
*/
public function setOrden($orden)
{
$this->orden = $orden;
return $this;
}
/**
* Get orden
*
* @return integer
*/
public function getOrden()
{
return $this->orden;
}
/**
* Determina si la promoción es un viaje genérico,
* según las condición:
* - $flujoCanje de la instancia debe ser igual al string 'generico', y
* - Id de la categoría asociada debe ser igual a 2 (Viajes)
*
* "Opción Genérico": Es una promoción canjeable de tipo Viaje,
* en la que el usuario puede determinar cuántos puntos utilizar.
*
* @return boolean
*/
public function esOpcionGenerica()
{
$categorias = $this->getCategorias();
$flujoCanje = $this->getFlujoCanje();
$esViaje=false;
foreach($categorias as $categoria){
if($categoria->getId() == 2){
$esViaje = true;
break;
}
}
// Comparar cadenas.
// "strcasecmp: Binary safe case-insensitive string comparison".
// retorna 0 si las cadenas son iguales, ignorando mayusculas.
$esGenerico = strcasecmp($flujoCanje, 'generico') == 0;
return $esViaje && $esGenerico;
}
/**
* Determina si la promoción es un viaje
* según las condición:
* - Id de la categoría asociada debe ser igual a 2 (Viajes)
*
* @return boolean
*/
public function esViaje()
{
$categorias = $this->getCategorias();
$esViaje=false;
foreach($categorias as $categoria){
if($categoria->getId() == 2){
$esViaje = true;
break;
}
}
return $esViaje;
}
/**
* Constructor
*/
public function __construct()
{
$this->imagenes = new \Doctrine\Common\Collections\ArrayCollection();
$this->categorias = new \Doctrine\Common\Collections\ArrayCollection();
$this->etiquetas = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get imagenes
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getImagenes()
{
return $this->imagenes;
}
/**
* Set destacado
*
* @param boolean $destacado
* @return Exppromociones
*/
public function setDestacado($destacado)
{
$this->destacado = $destacado;
return $this;
}
/**
* Get destacado
*
* @return boolean
*/
public function getDestacado()
{
return $this->destacado;
}
/**
* Add categorias
*
* @param \WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expcategorias $categorias
* @return Exppromociones
*/
public function addCategoria(\WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expcategorias $categorias)
{
$this->categorias[] = $categorias;
return $this;
}
/**
* Remove categorias
*
* @param \WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expcategorias $categorias
*/
public function removeCategoria(\WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expcategorias $categorias)
{
$this->categorias->removeElement($categorias);
}
/**
* Get categorias
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCategorias()
{
return $this->categorias;
}
/**
* Add imagenes
*
* @param \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $imagenes
* @return Exppromociones
*/
public function addImagene(\WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $imagenes)
{
$this->imagenes[] = $imagenes;
return $this;
}
/**
* Remove imagenes
*
* @param \WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $imagenes
*/
public function removeImagene(\WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes $imagenes)
{
$this->imagenes->removeElement($imagenes);
}
/**
* Add etiquetas
*
* @param \WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expetiquetas $etiquetas
* @return Exppromociones
*/
public function addEtiqueta(\WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expetiquetas $etiquetas)
{
$this->etiquetas[] = $etiquetas;
return $this;
}
/**
* Remove etiquetas
*
* @param \WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expetiquetas $etiquetas
*/
public function removeEtiqueta(\WORK2\WORK\SitioExperience\FrontendBundle\Entity\Expetiquetas $etiquetas)
{
$this->etiquetas->removeElement($etiquetas);
}
/**
* Get etiquetas
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getEtiquetas()
{
return $this->etiquetas;
}
/**
* Set fechaFinNovedad
*
* @param \DateTime $fechaFinNovedad
* @return Exppromociones
*/
public function setFechaFinNovedad($fechaFinNovedad)
{
$this->fechaFinNovedad = $fechaFinNovedad;
return $this;
}
/**
* Get fechaFinNovedad
*
* @return \DateTime
*/
public function getFechaFinNovedad()
{
return $this->fechaFinNovedad;
}
/**
* Set cantidadVista
*
* @param integer $cantidadVista
* @return Exppromociones
*/
public function setCantidadVista($cantidadVista)
{
$this->cantidadVista = $cantidadVista;
return $this;
}
/**
* Get cantidadVista
*
* @return integer
*/
public function getCantidadVista()
{
return $this->cantidadVista;
}
/**
* Set cantidadCanjeada
*
* @param integer $cantidadCanjeada
* @return Exppromociones
*/
public function setCantidadCanjeada($cantidadCanjeada)
{
$this->cantidadCanjeada = $cantidadCanjeada;
return $this;
}
/**
* Get cantidadCanjeada
*
* @return integer
*/
public function getCantidadCanjeada()
{
return $this->cantidadCanjeada;
}
/**
* Set valorGuaranies
*
* @param integer $valorGuaranies
* @return Exppromociones
*/
public function setValorGuaranies($valorGuaranies)
{
$this->valorGuaranies = $valorGuaranies;
return $this;
}
/**
* Get valorGuaranies
*
* @return integer
*/
public function getValorGuaranies()
{
return $this->valorGuaranies;
}
/**
* Set puntosTelefonico
*
* @param integer $puntosTelefonico
* @return Exppromociones
*/
public function setPuntosTelefonico($puntosTelefonico)
{
$this->puntosTelefonico = $puntosTelefonico;
return $this;
}
/**
* Get puntosTelefonico
*
* @return integer
*/
public function getPuntosTelefonico()
{
return $this->puntosTelefonico;
}
/**
* Set texto_circulo
*
* @param string $textoCirculo
* @return Exppromociones
*/
public function setTextoCirculo($textoCirculo)
{
$this->texto_circulo = $textoCirculo;
return $this;
}
/**
* Get texto_circulo
*
* @return string
*/
public function getTextoCirculo()
{
return $this->texto_circulo;
}
public function __toString()
{
return $this->getNombre();
}
/**
* Set mostrarValorGuaranies
*
* @param boolean $mostrarValorGuaranies
* @return Exppromociones
*/
public function setMostrarValorGuaranies($mostrarValorGuaranies)
{
$this->mostrarValorGuaranies = $mostrarValorGuaranies;
return $this;
}
/**
* Get mostrarValorGuaranies
*
* @return boolean
*/
public function getMostrarValorGuaranies()
{
return $this->mostrarValorGuaranies;
}
}
此实体Exppromociones
具有属性$imagenes
,该属性具有另一个实体Imagenes
的实例
Imagenes.php
<?php
namespace WORK2\WORK\SitioUniversos\ImagenesBundle\Entity;
use Iphp\FileStoreBundle\Mapping\Annotation as FileStore;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
/**
* Imagenes
*
* @ORM\Table(name="imagenes")
* @ORM\Entity
* @FileStore\Uploadable
*/
class Imagenes
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Nombre", type="string", length=255)
*/
private $nombre;
/**
* @var \Datetime
*
* @ORM\Column(name="Fecha_Carga", type="date")
*/
private $fechaCarga;
/**
* @ORM\Column(name="Enlace", type="array")
* @Assert\File( maxSize="20M")
* @FileStore\UploadableField(mapping="imagenes")
**/
private $enlace;
/**
* @var string
*
* @ORM\Column(name="Tipo", type="string", length=255)
*/
private $tipo;
/**
* @var string
*
* @ORM\Column(name="Link", type="string", length=255)
*/
private $link;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nombre
*
* @param string $nombre
* @return Imagenes
*/
public function setNombre($nombre)
{
$this->nombre = $nombre;
return $this;
}
/**
* Get nombre
*
* @return string
*/
public function getNombre()
{
return $this->nombre;
}
/**
* Set fechaCarga
*
* @param \DateTime $fechaCarga
* @return Imagenes
*/
public function setFechaCarga($fechaCarga)
{
$this->fechaCarga = $fechaCarga;
return $this;
}
/**
* Get fechaCarga
*
* @return \DateTime
*/
public function getFechaCarga()
{
return $this->fechaCarga;
}
/**
* Set enlace
*
* @param array $enlace
* @return Imagenes
*/
public function setEnlace($enlace)
{
$this->enlace = $enlace;
return $this;
}
/**
* Get enlace
*
* @return array
*/
public function getEnlace()
{
return $this->enlace;
}
public function __toString()
{
return $this->getNombre();
}
/**
* Set tipo
*
* @param string $tipo
* @return Imagenes
*/
public function setTipo($tipo)
{
$this->tipo = $tipo;
return $this;
}
/**
* Get tipo
*
* @return string
*/
public function getTipo()
{
return $this->tipo;
}
/**
* Set link
*
* @param string $link
* @return Imagenes
*/
public function setLink($link)
{
$this->link = $link;
return $this;
}
/**
* Get link
*
* @return string
*/
public function getLink()
{
return $this->link;
}
public function __construct(){
$this->fechaCarga = new \DateTime();
}
}
我想查看Imagenes
中与Exppromociones
没有关联的所有图像
映射:
WORK2\WORK\SitioExperience\FrontendBundle\Entity\Exppromociones:
type: entity
table: exppromociones
indexes:
IDX_4EE4A008763C8AA7:
columns:
- imagen_id
IDX_4EE4A008684EC833:
columns:
- banner_id
IDX_4EE4A0083397707A:
columns:
- categoria_id
IDX_COMERCIOS_PROMOCION:
columns:
- comercio_id
id:
id:
type: integer
nullable: false
unsigned: false
comment: ''
id: true
generator:
strategy: IDENTITY
fields:
...
...
manyToMany:
imagenes:
cascade: ["persist","remove"]
targetEntity: WORK2\WORK\SitioUniversos\ImagenesBundle\Entity\Imagenes
joinTable:
name: imagenes_x_exppromociones
joinColumns:
id_promocion:
referencedColumnName: id
inverseJoinColumns:
id_imagen:
referencedColumnName: id
unique: true
lifecycleCallbacks: { }
答案 0 :(得分:0)
此职位需要更多信息,所以这是一个命中/未命中类型的答案:
img_pro.image_id
看起来很可疑。
DQL使用属性名称,而不使用字段名称,因此应为img_pro.image