首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用KnpPaginatorBundle排序连接表

用KnpPaginatorBundle排序连接表
EN

Stack Overflow用户
提问于 2013-03-16 17:32:45
回答 3查看 6.1K关注 0票数 5

为了更好地熟悉Symfony2和KnpPaginatorBundle,我设置了一个测试。我有一个带宠物的表,它引用宠物类型(DogCat等)。我可以按照idname进行排序,但是当我尝试按动物type排序时,我会收到一条错误消息,声明:

在给定的查询组件中,不存在由

我试过各种字段名,但似乎没有用。

实体:MyPets.php

代码语言:javascript
复制
<?php
namespace Xyz\TestBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * MyPet
 */

class MyPet
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $name;

    /**
     * Set id
     *
     * @param integer $id
     * @return MyPet
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

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

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

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }
    /**
     * @var \Xyz\TestBundle\Entity\AnimalKind
     */
    private $AnimalKind;

    /**
     * Set AnimalKind
     *
     * @param \Xyz\TestBundle\Entity\AnimalKind $animalKind
     * @return MyPet
     */
    public function setAnimalKind(\Xyz\TestBundle\Entity\AnimalKind $animalKind)
    {
        $this->AnimalKind = $animalKind;
        return $this;
    }

    /**
     * Get AnimalKind
     *
     * @return \Xyz\TestBundle\Entity\AnimalKind 
     */
    public function getAnimalKind()
    {
        return $this->AnimalKind;

    }
}

实体:AnimalKind.php

代码语言:javascript
复制
<?php
namespace Xyz\TestBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * AnimalKind
 */
class AnimalKind {

    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $type;

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

    /**
     * Set type
     *
     * @param string $type
     * @return AnimalKind
     */
    public function setType($type) {
        $this->type = $type;

        return $this;
    }

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

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $MyPets;

    /**
     * Constructor
     */
    public function __construct() {
        $this->MyPets = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add MyPets
     *
     * @param \Xyz\TestBundle\Entity\MyPet $myPets
     * @return AnimalKind
     */
    public function addMyPet(\Xyz\TestBundle\Entity\MyPet $myPets) {
        $this->MyPets[] = $myPets;

        return $this;
    }

    /**
     * Remove MyPets
     *
     * @param \Xyz\TestBundle\Entity\MyPet $myPets
     */
    public function removeMyPet(\Xyz\TestBundle\Entity\MyPet $myPets) {
        $this->MyPets->removeElement($myPets);
    }

    /**
     * Get MyPets
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getMyPets() {
        return $this->MyPets;
    }

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

}

控制器:MyPetController.php (IndexAction)

代码语言:javascript
复制
    public function indexAction()
    {
        $em = $this->getDoctrine()->getManager();

        $query = $em->createQuery("SELECT a FROM XyzTestBundle:MyPet a");

        $paginator  = $this->get('knp_paginator');

        $pagination = $paginator->paginate($query,$this->get('request')->query->get('page', 
          1)/*page number*/,15/*limit per page*/);

        return $this->render('XyzTestBundle:MyPet:index.html.twig', array(
         'pagination' => $pagination,

        ));
    }

视图:MyPet/index.html.twig (剪短)

代码语言:javascript
复制
<table class="records_list">
    <thead>
        <tr>
            {# sorting of properties based on query components #}
            <th>{{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}</th>
            <th>{{ knp_pagination_sortable(pagination, 'Name', 'a.name') }}</th>
            <th>{{ knp_pagination_sortable(pagination, 'kind', 'a.animalkind') }}</th>
        </tr>
    </thead>
    <tbody>
    {% for mypet in pagination %}
        <tr>
            <td><a href="{{ path('xyz_mypet_show', { 'id': mypet.id }) }}">{{ mypet.id }}</a></td>
            <td>{{ mypet.name }}</td>
            <td>{{ mypet.animalkind }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

有人能给我一点关于这个问题的见解吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-16 22:13:30

第一个问题是缺少ORM关系声明;基本上在DB中,YourPet不能与AnimalKind相关联。

您可以找到有关Symfony网站上的实体关系和关联的文档。

YourPet实体的角度来看,您可能希望使用ManyToOne关系。

第二个问题,一旦您解决了上面的问题,就是您没有在查询中加入AnimalKind实体。

第三个问题是不能按实体排序查询结果。

第一个问题的潜在解决办法:

代码语言:javascript
复制
// In MyPet class
/**
 * @var \Xyz\TestBundle\Entity\AnimalKind
 * @ORM\OneToMany(targetEntity="AnimalKind", inversedBy="MyPets")
 */
private $AnimalKind;

// In AnimalKind class
/**
 * @var \Doctrine\Common\Collections\Collection
 * @ORM\ManyToOne(targetEntity="MyPet", inversedBy="AnimalKind")
 */
private $MyPets;

第二个问题的潜在解决办法:

代码语言:javascript
复制
$query = $em->createQuery("
    SELECT a, k
    FROM XyzTestBundle:MyPet a
    JOIN a.animalKind k 
");

第三个问题的潜在解决办法:

代码语言:javascript
复制
<th>{{ knp_pagination_sortable(pagination, 'kind', 'k.type') }}</th>
票数 5
EN

Stack Overflow用户

发布于 2016-08-31 15:33:12

要显示没有animalKind的动物,您必须在查询中使用左联接

代码语言:javascript
复制
$query = $em->createQuery("
    SELECT a, k
    FROM XyzTestBundle:MyPet a
    LEFT JOIN a.animalKind k 
");
票数 0
EN

Stack Overflow用户

发布于 2022-05-30 10:46:55

对于那些使用和DQL并仍在寻找答案的人:

代码语言:javascript
复制
    $qb = $this->createQueryBuilder('a');
    $qb->select('a', 'k')
        ->leftJoin(
            'a.animalKind',
            'k'
        )
    ;

假设->,您在实体中正确地创建了关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15452393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档