首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KnpPaginator不适用于已连接的表

KnpPaginator不适用于已连接的表
EN

Stack Overflow用户
提问于 2018-06-14 15:40:53
回答 1查看 225关注 0票数 1

我正在尝试将两个表连接起来,并从KnpPaginator获得一个排序结果集。这是我的密码。

视图

代码语言:javascript
复制
<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>

控制器

代码语言:javascript
复制
$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 */
        );

模型模型

代码语言:javascript
复制
/**
 * @ORM\Entity(repositoryClass="App\Repository\ModelRepository")
 */
class Model
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**

汽车模型

代码语言:javascript
复制
<?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')只显示了这个错误

在给定的查询组件中,没有使用c++别名的这样的字段model.name。

为了提高可见度,我删除了一些不想要的代码。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 04:40:12

终于找到了解决办法。

代码语言:javascript
复制
    $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 */
    );

但你需要正确地增加人际关系才能起作用我在这里补充了,

代码语言:javascript
复制
/**
     * @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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50861296

复制
相关文章

相似问题

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