php - Symfony2,学说限制和偏移量没有按预期工作

标签 php mysql symfony doctrine-orm offset

我正在尝试使用表中的 limit 和 offset 从我的表中获取结果,并且该表与另外两个表有关系。其中一个是 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();

我正在尝试使用此查询使用分页器:

$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;
    }
}

最佳答案

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

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

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

$attractions = $query->getResult();

关于php - Symfony2,学说限制和偏移量没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079018/

相关文章:

MySQL : updating a table from another table by leftjoin vs iterating

php - 需要PHP票务系统 源码

javascript - 4 FOSJSRouting 回调=fos.Router.setData & 仅在生产中找不到路由

mysql - 交响乐/MySQL : full text search syntax error for special chars

php - JMSSerializerBundle 在 JSON 中返回 double 字符串

php - 使用 js .innerHTML 更新 PHP 变量

php - 如何在不破坏字符集的情况下正确地将网站迁移到新服务器?

mysql - 如何为sql查询设置列的值?

php - 使用 faker 防止 Laravel 工厂中两个外键的重复条目

php - php 脚本 JSON 字符串中的后台事件 FullCalendar 存在问题