Symfony2,学说限制和偏移量不能按预期工作

时间:2014-09-27 20:41:05

标签: php mysql symfony doctrine-orm offset

我试图从我的表中使用limit和offsett从我的表中获取结果,这个表与另外两个表有关系..其中一个是MayToOne,另一个是OneToOne

如果我不使用setFirstResult和setMaxResults,结果是预期的,因为返回我的表的信息和其他表的相关信息但是使用setFirst ..和setMax ..只返回表的信息而不是相关表格的信息。

$query = $this->repository->createQueryBuilder('p')
                ->where('LOWER(p.name) LIKE LOWER(:term)')
                ->orWhere('LOWER(p.summary) LIKE LOWER(:term)')
                ->orwhere('LOWER(p.description) LIKE LOWER(:term)')
                ->setParameter('term', '%'.$parameters['term'].'%')
                ->setFirstResult($offset)
                ->setMaxResults($limit)
                ->orderBy('p.id','DESC')
                ->getQuery();

$attractions = $query->getResult();

我正在使用此查询尝试使用paginator:

$query = $this->repository->createQueryBuilder('p')
                ->where('LOWER(p.name) LIKE LOWER(:term)')
                ->orWhere('LOWER(p.summary) LIKE LOWER(:term)')
                ->orwhere('LOWER(p.description) LIKE LOWER(:term)')
                ->setParameter('term', '%'.$parameters['term'].'%')
                ->setFirstResult($offset)
                ->setMaxResults($limit)
                ->orderBy('p.id','DESC');

$attractions = new Paginator($query, $fetchJoinCollection = true);

但是无法正常工作,因为出现此错误:

[Semantical Error] The annotation "@Enum" in property Doctrine\ORM\Mapping\GeneratedValue::$strategy was never imported. Did you maybe forget to add a "use" statement for this annotation?

实体

    <?php

namespace Acme\MyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Acme\MyBundle\Model\AttractionInterface;

use Gedmo\Mapping\Annotation as Gedmo;

use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer;

/**
 * Attraction
 *
 * @ORM\Table(name="attractions")
 * @ORM\Entity
 *
 * @ExclusionPolicy("all") 
 */
class Attraction implements AttractionInterface
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Expose
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=150, nullable=false)
     * @Expose
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="latitude", type="string", length=30, nullable=false)
     * @Expose
     */
    private $latitude;

    /**
     * @var string
     *
     * @ORM\Column(name="longitude", type="string", length=30, nullable=false)
     * @Expose
     */
    private $longitude;

    /**
     * @var string
     *
     * @ORM\Column(name="summary", type="text", nullable=false)
     * @Expose
     */
    private $summary;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="text", nullable=true)
     * @Expose
     */
    private $description;

    /**
     * @var integer
     *
     * @ORM\Column(name="available_places", type="smallint")
     * @Expose
     */
    private $availablePlaces;

    /**
     * @var float
     *
     * @ORM\Column(name="original_price", type="float", nullable=false)
     * @Expose
     */
    private $originalPrice;

    /**
     * @var float
     *
     * @ORM\Column(name="new_price", type="float", nullable=false)
     * @Expose
     */
    private $newPrice;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="starting_point", type="datetime", nullable=false)
     * @Expose
     */
    private $startingPoint;

    /**
     * @var string
     *
     * @ORM\Column(name="picture", type="string", length=50, nullable=false)
     * @Expose
     */
    private $picture;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="Vendor")
     * @ORM\JoinColumn(name="vendor", referencedColumnName="id")
     * @Expose
     */
    private $vendor;

    /**
     * @var integer
     *
     * @ORM\OneToOne(targetEntity="Category")
     * @ORM\JoinColumn(name="category", referencedColumnName="id")
     * @Expose
     */
    private $category;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime", options={"default" = "CURRENT_TIMESTAMP"}, nullable=true)
     * @Gedmo\Timestampable(on="create")
     * @Expose
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime", options={"default" = "CURRENT_TIMESTAMP"}, nullable=true)
     * @Expose
     */
    private $updatedAt;


    public function __toString()
    {
        return $this->name;
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Attraction
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set latitude
     *
     * @param string $latitude
     * @return Attraction
     */
    public function setLatitude($latitude)
    {
        $this->latitude = $latitude;

        return $this;
    }

    /**
     * Get latitude
     *
     * @return string 
     */
    public function getLatitude()
    {
        return $this->latitude;
    }

    /**
     * Set longitude
     *
     * @param string $longitude
     * @return Attraction
     */
    public function setLongitude($longitude)
    {
        $this->longitude = $longitude;

        return $this;
    }

    /**
     * Get longitude
     *
     * @return string 
     */
    public function getLongitude()
    {
        return $this->longitude;
    }

    /**
     * Set summary
     *
     * @param string $summary
     * @return Attraction
     */
    public function setSummary($summary)
    {
        $this->summary = $summary;

        return $this;
    }

    /**
     * Get summary
     *
     * @return string 
     */
    public function getSummary()
    {
        return $this->summary;
    }

    /**
     * Set description
     *
     * @param string $description
     * @return Attraction
     */
    public function setDescription($description)
    {
        $this->description = $description;

        return $this;
    }

    /**
     * Get description
     *
     * @return string 
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Set availablePlaces
     *
     * @param integer $availablePlaces
     * @return Attraction
     */
    public function setAvailablePlaces($availablePlaces)
    {
        $this->availablePlaces = $availablePlaces;

        return $this;
    }

    /**
     * Get availablePlaces
     *
     * @return integer 
     */
    public function getAvailablePlaces()
    {
        return $this->availablePlaces;
    }

    /**
     * Set originalPrice
     *
     * @param float $originalPrice
     * @return Attraction
     */
    public function setOriginalPrice($originalPrice)
    {
        $this->originalPrice = $originalPrice;

        return $this;
    }

    /**
     * Get originalPrice
     *
     * @return float 
     */
    public function getOriginalPrice()
    {
        return $this->originalPrice;
    }

    /**
     * Set newPrice
     *
     * @param float $newPrice
     * @return Attraction
     */
    public function setNewPrice($newPrice)
    {
        $this->newPrice = $newPrice;

        return $this;
    }

    /**
     * Get newPrice
     *
     * @return float 
     */
    public function getNewPrice()
    {
        return $this->newPrice;
    }

    /**
     * Set startingPoint
     *
     * @param \DateTime $startingPoint
     * @return Attraction
     */

    public function setStartingPoint($startingPoint)
    {
        $this->startingPoint = \DateTime::createFromFormat('Y-m-d H:i:s', $startingPoint);

        return $this;
    }

    /**
     * Get startingPoint
     *
     * @return \DateTime 
     */
    public function getStartingPoint()
    {
        return $this->startingPoint;
    }

    /**
     * Set picture
     *
     * @param string $picture
     * @return Attraction
     */
    public function setPicture($picture)
    {
        $this->picture = $picture;

        return $this;
    }

    /**
     * Get picture
     *
     * @return string 
     */
    public function getPicture()
    {
        return $this->picture;
    }

    /**
     * Set vendor
     *
     * @param integer $vendor
     * @return Attraction
     */
    public function setVendor($vendor)
    {
        $this->vendor = $vendor;

        return $this;
    }

    /**
     * Get vendor
     *
     * @return integer 
     */
    public function getVendor()
    {
        return $this->vendor;
    }

    /**
     * Set category
     *
     * @param integer $category
     * @return Attraction
     */
    public function setCategory($category)
    {
        $this->category = $category;

        return $this;
    }

    /**
     * Get categoryId
     *
     * @return integer 
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     * Set createdAt
     *
     * @param \DateTime $createdAt
     * @return Attraction
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;

        return $this;
    }

    /**
     * Get createdAt
     *
     * @return \DateTime 
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     * @return Attraction
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt
     *
     * @return \DateTime 
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }
}

1 个答案:

答案 0 :(得分:0)

你看过https://github.com/schmittjoh/JMSSerializerBundle/issues/380了吗? 它似乎有同样的问题。

一个问题:如果没有那么复杂的查询,它能运作吗?例如:

$query = $this->repository->createQueryBuilder('p')
                ->orderBy('p.id','DESC')
                ->getQuery();

$attractions = $query->getResult();