ich mit dem EventSubscriber einige Tests haben könnte, aber es nicht richtig zu arbeiten, so habe ich beschlossen, nur direkt über das Hinzufügen der Code zu meiner Klasse (q & d). Ich benutze Zend Framework, also ändere das Holen des Entity Managers, wenn du eine andere Lösung hast.
Es funktioniert wie folgt:
- Wenn das Unternehmen die GetLast verwenden Erstellen von() und fügen Sie die neue Einheit letzte ($ last_entity-> getSort() + 1)
- Fügen Sie die SortUp und sortDown Funktionen und ihre Subroutinen auf die Entität Code
- Add „sort ASC“ in allen DQL-Abfragen, wo Sie es
Das Unternehmen Code sortiert werden sollen, wie folgt:
/**
* Searches for the element above and switches them
* with eachother. Performs a EntityManager::flush()
* to save the results after the switch.
*/
public function sortUp() {
try {
$em = \Zend_Registry::get("entitymanager");
$class_name = get_class($this);
$dql = "SELECT ut FROM $class_name ut WHERE ut.inactive IS NULL AND ut.inactive IS NULL AND ut.sort < '" . $this->getSort() . "' ORDER BY ut.sort DESC";
$query = $em->createQuery($dql);
$query->setMaxResults(1);
$ut = $query->getResult();
} catch (Exception $exc) {
throw new Exception("Error when looking for sortable partner: " . $exc->getMessage());
}
if (count($ut)) {
$this->_switchSortAndSave($ut[0]);
}
}
/**
* Searches for the element below and switches them
* with eachother. Performs a EntityManager::flush()
* to save the results after the switch.
*/
public function sortDown() {
try {
$em = \Zend_Registry::get("entitymanager");
$class_name = get_class($this);
$dql = "SELECT ut FROM $class_name ut WHERE ut.inactive IS NULL AND ut.sort > '" . $this->getSort() . "' ORDER BY ut.sort ASC";
$query = $em->createQuery($dql);
$query->setMaxResults(1);
$ut = $query->getResult();
} catch (Exception $exc) {
throw new Exception("Error when looking for sortable partner: " . $exc->getMessage());
}
if (count($ut)) {
$this->_switchSortAndSave($ut[0]);
}
}
private function _switchSortAndSave(\Entities\Usertype $switch_entity) {
$new_sort = $switch_entity->getSort();
$switch_entity->setSort($this->getSort());
$this->setSort($new_sort);
$em = \Zend_Registry::get("entitymanager");
$em->persist($switch_entity);
$em->persist($this);
$em->flush();
}
/**
* Looks for the last entry according to sort order
* and returns that if found.
*
* @return Entity|null
*/
public static function findLast() {
try {
$em = \Zend_Registry::get("entitymanager");
$class_name = get_called_class();
$dql = "SELECT ut FROM $class_name ut ORDER BY ut.sort DESC";
$query = $em->createQuery($dql);
$query->setMaxResults(1);
$ut = $query->getResult();
} catch (Exception $exc) {
throw new Exception("Error when searching for last $class_name: " . $exc->getMessage());
}
if (count($ut))
return $ut[0];
else
return null;
}
ich mit dieser Lösung nicht so zufrieden bin so, wenn jemand mit einem schönen Sortable für Lehre 2 bitte teilen :)
haben Sie es geschafft, eine Lösung zu finden? Ich bin jetzt auf der Suche nach und fragte mich, was Sie am Ende benutzt haben? – DavidW