/**
* カテゴリの順位を1下げる.
*
* @param \Eccube\Entity\Category $Category カテゴリ
* @return boolean 成功した場合 true
*/
public function down(\Eccube\Entity\Category $Category)
{
$em = $this->getEntityManager();
$em->getConnection()->beginTransaction();
try {
$rank = $Category->getRank();
$Parent = $Category->getParent();
if ($Parent) {
$CategoryDown = $this->createQueryBuilder('c')->where('c.rank < :rank AND c.Parent = :Parent')->setParameter('rank', $rank)->setParameter('Parent', $Parent)->orderBy('c.rank', 'DESC')->setMaxResults(1)->getQuery()->getSingleResult();
} else {
$CategoryDown = $this->createQueryBuilder('c')->where('c.rank < :rank AND c.Parent IS NULL')->setParameter('rank', $rank)->orderBy('c.rank', 'DESC')->setMaxResults(1)->getQuery()->getSingleResult();
}
$this_count = $Category->countBranches();
$down_count = $CategoryDown->countBranches();
$Category->calcChildrenRank($em, $down_count * -1);
$CategoryDown->calcChildrenRank($em, $this_count);
$em->flush();
$em->getConnection()->commit();
} catch (\Exception $e) {
$em->getConnection()->rollback();
return false;
}
return true;
}