我正在尝试使用KnpPaginator对一些数据进行排序,但是没有如何使用“选项”数组的示例。
现在,我通过将数据传递给findBy本身来对数据进行排序,但是我不能通过这种方式按子对象属性进行排序。
$this->limit = $request->query->getInt('limit', $container->getParameter('pagination.default_limit'));
$this->page = $request->query->getInt('page', 1);
$sortColumn = $this->camelcase($request->query->get('sort', 'id'));
$sortDirection = $request->query->get('direction', 'asc');
$this->sort = array($sortColumn => $sortDirection);
$this->list = $this->getRepo(Service::class)->findBy(
array('user' => $this->getUser()->getId()),
$this->sort
);
$pagination = $this->get('knp_paginator')->paginate(
$this->list,
$this->page,
$this->limit
);
当我想按Service列之一进行排序但要按Service->getType()->getName()
属性对其进行排序时,它完全可以正常工作。
服务具有类型属性,该属性是与ServiceType的ManyToOne关系。
ServiceType使用可翻译的DoctrineBehaviors,因此列名称属于名为ServiceTypeTranslation的其他对象。
我想使用其全部功能而不必自己编写DQL,但是当我尝试命名“ type.name”之类的排序时,出现此列不存在的错误。
急于加载将无济于事,因为它仅连接1个表,而“ name”属性的转换位于Service的2个表中。
我知道我可以尝试将$ options数组用作paginate()的第4个参数,但无法正常工作。
有任何想法吗?在实体的某些部分下方进行可视化。
Service.php
/**
* @ORM\Table
* @ORM\Entity
*/
class Service
{
...
/**
* @ORM\ManyToOne(targetEntity="DictServiceType", fetch="EAGER")
* @ORM\JoinColumn(referencedColumnName="id", nullable=false)
*/
private $type;
...
ServiceType.php
/**
* @ORM\Table
* @ORM\Entity
*/
class DictServiceType
{
use ORMBehaviors\Translatable\Translatable;
...
/**
* @return mixed
*/
public function getName()
{
return $this->translate(null, false)->getName();
}
...
ServiceTypeTranslation.php
/**
* @ORM\Table
* @ORM\Entity
*/
class DictServiceTypeTranslation
{
use ORMBehaviors\Translatable\Translation;
/**
* @var string
*
* @ORM\Column(type="string", length=255)
*/
private $name;
...
为了记录起见,我尝试根据paginate()方法说明中的内容,使用这样的分页器,但它甚至无法工作。
没有任何地方可以使用$ whitelist数组的示例,至少我找不到它们。
$pagination = $this->get('knp_paginator')->paginate(
$this->list,
$this->page,
$this->limit,
array(
array(
$this->sort
)
)
);
第四个参数的phpdoc说:
* @param array $options - less used options: * boolean $distinct - default true for distinction of results * string $alias - pagination alias, default none * array $whitelist - sortable whitelist for target fields being paginated