在一个查询构建器中,我做了一个orderby,但是如果我命令一个' leftjoin'我的订单不起作用,我不明白为什么。
我的查询编译器:
$qb = $this->createQueryBuilder('r')
->leftJoin('r.clientCategorisation', 'cc')
->leftJoin('cc.categorisation', 'c')
->addOrderBy('c.id','ASC')
$a_result = $qb->getQuery()->getResult();
return $a_result;
如果我订购了我的' r,那就没关系,但如果我尝试订购' c'那不起作用...... 我可以订购我的' c' asc如果在我看来html.twig我添加:
{{ clientCategorisation.categorisation.id}}
我不明白为什么???这种方法仅适用于asc',#39; desc'失败。
编辑:我有一个数据表,在我的表中,我的订单是在一个对象上:
A_resultats = $this->_O_resultatsR->getByRapportOrderByCat($idRapport, $A_onglet);
getByRapportOrderByCat是我的查询构建者。
然后在foreach:
foreach ( $A_resultats as $I_key => $O_resultat ) {
我构建我的专栏,并在此专栏中分析':
$A_valuesForTableau[$I_key]['analyse'] = $this->render('mypath', array(
'O_resultat' => $O_resultat,
'A_clientCats' => $A_clientCats,
))->getContent();
我再次将我的对象$ O_resultat提供给模板(如果评论此对象在分析我的订单时很好),我认为在模板中我的订单来自querybuilder被asc替换(基本顺序)。
抱歉我的英语不好。
edit2: 实体重新安排: class Resultat { / ** * @var整数 * * @ORM \ Column(name =" id",type =" integer") * @ORM \ Id * @ORM \ GeneratedValue(策略=" AUTO") * / 私人$ id;
/**
* @ORM\ManyToOne(targetEntity="ClientCategorisation")
* @ORM\JoinColumn(name="client_categorisation", referencedColumnName="id", onDelete="CASCADE", nullable=true)
*/
private $clientCategorisation;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set clientCategorisation
*
* @param ClientCategorisation $clientCategorisation
* @return Resultat
*/
public function setClientCategorisation(ClientCategorisation $clientCategorisation = null)
{
$this->clientCategorisation = $clientCategorisation;
return $this;
}
/**
* Get clientCategorisation
*
* @return ClientCategorisation
*/
public function getClientCategorisation()
{
return $this->clientCategorisation;
}
}
实体clientcategorisation:
class ClientCategorisation
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Categorisation")
* @ORM\JoinColumn(name="categorisation", referencedColumnName="id", onDelete="CASCADE")
*/
private $categorisation;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set categorisation
*
* @param string $categorisation
* @return ClientCategorisation
*/
public function setCategorisation($categorisation)
{
$this->categorisation = $categorisation;
return $this;
}
/**
* Get categorisation
*
* @return string
*/
public function getCategorisation()
{
return $this->categorisation;
}
}
分类实体:
class Categorisation
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
/**
* @var integer
*
* @ORM\Column(name="ordre", type="integer", nullable=true)
*/
private $ordre;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
* @return Categorisation
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set ordre
*
* @param integer $ordre
* @return Categorisation
*/
public function setOrdre($ordre)
{
$this->ordre = $ordre;
return $this;
}
/**
* Get ordre
*
* @return integer
*/
public function getOrdre()
{
return $this->ordre;
}
}
edit2:我找到了一个解决方案,当我使用' O_resultat'我的订单失败了,所以在我的模板中我得到了A_resultats'这样的工作:
{% for O_resultats in A_resultats %}
{% if O_resultats.id == O_resultat.id %}
我用O_resultats替换了我的视觉O_resultat
答案 0 :(得分:0)
尝试将该字段添加为select参数并标记为hidden,以便不修改水化流程(对象而不是数组),如下所示:
$qb = $this->createQueryBuilder('r')
->addSelect('c.id as HIDDEN mysort')
->leftJoin('r.clientCategorisation', 'cc')
->leftJoin('cc.categorisation', 'c')
->addOrderBy('mysort','ASC');
$a_result = $qb->getQuery()->getResult();
return $a_result;
希望这个帮助
答案 1 :(得分:0)
您似乎在order-by
映射的orderBy
关系中有categorisation
标记或clientCategorisation
注释。如果您有该注释,则您的订单将由您在query builder
中创建的订单明确合并。
示例:
<?php
/** @Entity **/
class User
{
// ...
/**
* @ManyToMany(targetEntity="Group")
* @OrderBy({"id" = "ASC"})
**/
private $groups;
}
如果你创建这样的查询:
$qb = $this->createQueryBuilder('user')
->leftJoin('user.groups', 'group')
->orderBy('group.name', 'DESC')
;
doctrine执行的最终查询将是:
SELECT user FROM User LEFT JOIN user.groups group ORDER BY group.id ASC, group.name DESC;
因此结果将由group.id
ASC(在映射中定义)排序,然后由group.name
DESC(在查询构建器中定义)排序。
如果您希望能够按group.name DESC
排序(例如),则必须删除注释中的@OrderBy({"id" = "ASC"})
。