【问题标题】:KnpPaginator not works on joined tablesKnpPaginator 不适用于连接表
【发布时间】:2018-11-24 10:56:57
【问题描述】:

我正在尝试连接两个表并从 KnpPaginator 获取排序结果集。这是我的代码。

查看

<table class="table table-bordered">
       <tr>
            <th>{{ knp_pagination_sortable(pagination, 'Id', 'c.id') }}</th>
            <th{% if pagination.isSorted('c.name') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Name', 'c.name') }}</th>
            <th>{{ knp_pagination_sortable(pagination, 'Version', 'c.model.name') }}</th>
       </tr>
       {% for article in pagination %}
           <tr {% if loop.index is odd %}class="color"{% endif %}>
               <td>{{ article.id }}</td>
               <td>{{ article.getName }}</td>
               <td>{{ article.model.name }}</td>
           </tr>
        {% endfor %}
</table>

控制器

$em = $this->get('doctrine.orm.entity_manager');
        $dql = "SELECT c FROM App\Entity\Car c";
        $query = $em->createQuery($dql);

        $paginator = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
                $query, /* query NOT result */ $request->query->getInt('page', 1)/* page number */, 10/* limit per page */
        );

模型模型

/**
 * @ORM\Entity(repositoryClass="App\Repository\ModelRepository")
 */
class Model
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**

车型

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\CarRepository")
 */
class Car
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $code;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Model",cascade={"refresh","merge"}, inversedBy="cars")
     * @ORM\JoinColumn(nullable=false)
     */
    private $model;

    public function getModel(): ?Model
    {
        return $this->model;
    }

    public /**
 * @param $
 */function setModel(?Model $model): self
    {
        $this->model = $model;

        return $this;
    }
}

当我在表格主体中获得 article.model.name 时,它​​可以工作。但是knp_pagination_sortable(pagination, 'Version', 'c.model.name') 只显示这个错误

在给定的 Query 组件中没有这样的字段 [model.name], 由 [c] 起别名

我删除了一些不需要的代码以获得更好的可见性。谢谢

【问题讨论】:

    标签: symfony4 knppaginator


    【解决方案1】:

    终于找到了解决办法。

        $em = $this->get('doctrine.orm.entity_manager');
        $qb = $em->createQueryBuilder();
    
        $query = $qb->select('c', 'm')
                ->from('App\Entity\Car', 'c')
                ->leftJoin('c.model', 'm')
                ->getQuery();
    
        $paginator = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
                $query, /* query NOT result */ $request->query->getInt('page', 1)/* page number */, 10/* limit per page */
        );
    

    但是您需要正确添加关系才能工作,我在这里添加了,

    /**
         * @ORM\ManyToOne(targetEntity="App\Entity\Model",cascade={"refresh","merge"}, inversedBy="cars")
         * @ORM\JoinColumn(nullable=false)
         */
        private $model;
    
        public function getModel(): ?Model
        {
            return $this->model;
        }
    
        public /**
     * @param $
     */function setModel(?Model $model): self
        {
            $this->model = $model;
    
            return $this;
        }
    

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2013-12-02
      • 1970-01-01
      • 2015-05-28
      • 2015-02-22
      相关资源
      最近更新 更多