按国家名称排序结果,而不是国家代码,Symfony2,

时间:2014-12-12 00:00:24

标签: php symfony doctrine-orm

我使用的是knpPaginatorBundle,我希望按国家名称(或翻译国家/地区名称,如果可能的话)对结果进行排序代码,因为名称根据区域设置" en,fr,de ..")进行了更改。

例如西班牙在英语中以 S 开头,在法语中以 Espagne 开头,以 E 开头,但是代码是" ES"它当然不会改变。有可能这样做吗?

这是我的代码:

枝条

<li class="sort-by-country {% if pagination.isSorted('t.country') %}active{% endif %}">{{ knp_pagination_sortable(pagination, 'Country', 't.country') }}</li>

控制器:

public function listAction($page, Request $request)
{
    $em = $this->getDoctrine()->getManager();

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

    $qb = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend();

    $pagination = $paginator->paginate(
        $qb,
        $request->query->get('page', $page),10);


    return $this->render('ProjectFrontendBundle:Travel:travel-list-view.html.twig',array(
        'pagination' => $pagination,
    ));
}

存储库

//getListTravelsFrontend
public function getListTravelsFrontend()
{

    $qb = $this->createQueryBuilder('t')
        ->leftJoin('t.image', 'i')
        ->addSelect('i')
        ->leftJoin('t.agence', 'a')
        ->addSelect('a')
        ->Where('t.enabled = 1');

    return $qb;

}

实体:

class Travel
{

/**
 * @ORM\Column(name="country", type="string", length=5, nullable=false)
 *
 * @Assert\Country
 */
protected $country;

这就是如何显示我使用此扩展程序的国家/地区的名称,并且它更加精简

namespace Project\TravelBundle\Twig;

class CountryExtension extends \Twig_Extension {
public function getFilters()
{
    return array(
        new \Twig_SimpleFilter('country', array($this, 'countryFilter')),
    );
}

public function countryFilter($countryCode,$locale = "en")
{
    $c = \Symfony\Component\Intl\Intl::getRegionBundle()->getCountryNames($locale);

    return array_key_exists($countryCode, $c)
        ? $c[$countryCode]
        : $countryCode;
}

public function getName()
{
    return 'country_extension';
}
}

1 个答案:

答案 0 :(得分:0)

看起来您必须将国家/地区加入您的查询构建器。但首先,您必须描述Travel和Country之间的关系(您可以在此处找到有关学说注释的更多信息:http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html)。设置映射后,添加到查询构建器:

->leftJoin('t.country', 'c')

然后在树枝上:

{{ knp_pagination_sortable(pagination, 'Country', 'c.code') }}

也许它会对您有所帮助:Sorting joined table with KnpPaginatorBundleSort over ManyToOne Relationship with KnpPaginatorBundle in Symfony2