# Eigene Backend-Spalte sortieren?

**URL:** <https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283>\
**Category:** Programmierung\
**Created:** [23. August 2019 um 11:31 UTC](https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283 "2019-08-23T11:31:59Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![codiverse](https://avatars.discourse-cdn.com/v4/letter/c/b782af/32.png) [@codiverse](https://forum.shopware.com/u/codiverse)\
**Post date:** [23. August 2019 um 11:31 UTC](https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283/1 "2019-08-23T11:31:59Z")

</div>

Hi zusammen,

ich habe über ein Plugin eine eigene Spalte im der Bestellübersicht hinzugefügt. Diese möchte ich nun gerne sortieren - allerdings bleibt “sortable: true” ohne Auswirkung.

custom/plugins/MeinPlugin/Resources/views/backend/order/view/meinplugin/list/list.js sieht so aus:

```
//{block name="backend/order/view/list/list" append}
//{namespace name="backend/meinplugin/main"}
Ext.define('Shopware.apps.Order.view.meinplugin.list.List', {

    /**
     * Defines an override applied to a class.
     * @string
     */
    override: 'Shopware.apps.Order.view.list.List',
	
    /**
     * Overrides the getColumns function of the overridden ExtJs object
     * and inserts two new columns
     * @return
     */
    getColumns: function() {
        var me = this;

        var columns = me.callOverridden(arguments);

        var columnDate = {
            header: 'Titel',
            dataIndex:'mein_attributfeld',
            flex: 2,
            sortable: true
        };
        
        return Ext.Array.insert(columns, 1, [columnDate]);
    }
	
});
//{/block}

```

Das Model habe ich entsprechend erweitert:

custom/plugins/MeinPlugin/Resources/views/backend/order/model/meinplugin/attribute.js

```
//{block name="backend/order/model/order/fields" append}
{ name: 'mein_attributfeld', type: 'string', useNull: true },
//{/block}

```

Hat jemand eine Idee, warum ein Klick auf den Spaltenheader gar keine Auswirkung hat?

Viele Grüße,  
Constantin

---

<div class="post-metadata">

**Author:** ![codiverse](https://avatars.discourse-cdn.com/v4/letter/c/b782af/32.png) [@codiverse](https://forum.shopware.com/u/codiverse)\
**Post date:** [23. August 2019 um 12:00 UTC](https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283/2 "2019-08-23T12:00:38Z")

</div>

Ok, ich habe inzwischen gemerkt, dass eine Exception fliegt wenn ich sortiere.

Offenbar schlägt der SQL Query fehl:

```
Uncaught Doctrine\ORM\Query\QueryException: SELECT orders.id FROM Shopware\Models\Order\Order orders LEFT JOIN orders.attribute attribute WHERE orders.number IS NOT NULL AND orders.status != :cancelStatus ORDER BY orders.mein_attribut DESC in /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:43

```

Das Attribut ist natürlich nicht Teil der Orders Tabelle, daher kann es nicht funktionieren.

Wie kann ich nach eigenen Attributen sortieren?

Ich habe gesehen, dass in

engine/Shopware/Controllers/Backend/Order.php

in der Funktion resolveSortParameter() Präfixe verwendet werden. Daher habe ich versucht, den dataIndex in custom/plugins/MeinPlugin/Resources/views/backend/order/view/meinplugin/list/list.js zu ändern und „attribute.“ davor zu schreiben:

```
//{block name="backend/order/view/list/list" append}
//{namespace name="backend/meinplugin/main"}
Ext.define('Shopware.apps.Order.view.meinplugin.list.List', {

    /**
     * Defines an override applied to a class.
     * @string
     */
    override: 'Shopware.apps.Order.view.list.List',
	
    /**
     * Overrides the getColumns function of the overridden ExtJs object
     * and inserts two new columns
     * @return
     */
    getColumns: function() {
        var me = this;

        var columns = me.callOverridden(arguments);

        var columnDate = {
            header: 'Titel',
            dataIndex:'attribute.mein_attribut',
            flex: 1,
            sortable: true,
            renderer:me.dateColumn
        };
        
        return Ext.Array.insert(columns, 1, [columnDate]);
    },

    /**
     * Formats the date column
     *
     * @param [string] - The order time value
     * @return [string] - The passed value, formatted with Ext.util.Format.date()
     */
    dateColumn:function (value, metaData, record) {
        if ( value === Ext.undefined ) {
            return value;
        }

        return Ext.util.Format.date(value);
    }
	
});
//{/block}

```

Aber der SQL Query schlägt leider trotzdem fehl. Hat jemand einen Tipp?

---

<div class="post-metadata">

**Author:** ![codiverse](https://avatars.discourse-cdn.com/v4/letter/c/b782af/32.png) [@codiverse](https://forum.shopware.com/u/codiverse)\
**Post date:** [26. August 2019 um 13:46 UTC](https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283/3 "2019-08-26T13:46:31Z")

</div>

Ist so etwas überhaupt vorgesehen?

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [26. August 2019 um 17:33 UTC](https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283/4 "2019-08-26T17:33:38Z")

</div>

Kannst du mal ein Screenshot vom Request machen?

&nbsp;

---

<div class="post-metadata">

**Author:** ![codiverse](https://avatars.discourse-cdn.com/v4/letter/c/b782af/32.png) [@codiverse](https://forum.shopware.com/u/codiverse)\
**Post date:** [27. August 2019 um 12:18 UTC](https://forum.shopware.com/t/eigene-backend-spalte-sortieren/61283/5 "2019-08-27T12:18:50Z")

</div>

> [@Shyim schrieb:](https://forum.shopware.com/profile/20792/Shyim "Shyim")
> 
> Kannst du mal ein Screenshot vom Request machen?
> 
> &nbsp;

Was meinst du genau damit?

Hierhin geht der Request, wenn ich auf den Spalten-Header zum Sortieren klicke:

[http://localhost:8888/sw56dev/backend/Order/getList?\_dc=1566907641249&page=1&start=0&limit=20&sort=[{"property"%3A"mein\_attribut"%2C"direction"%3A"DESC"}]](http://localhost:8888/sw56dev/backend/Order/getList?%5C_dc=1566907641249&page=1&start=0&limit=20&sort=%5B%7B%22property%22%3A%22mein%5C_attribut%22%2C%22direction%22%3A%22DESC%22%7D%5D)

Das ist die Fehlermeldung, die dann geworfen wird:

```
Fatal error: Uncaught Doctrine\ORM\Query\QueryException: SELECT orders.id FROM Shopware\Models\Order\Order orders LEFT JOIN orders.attribute attribute WHERE orders.number IS NOT NULL AND orders.status != :cancelStatus ORDER BY orders.mein_attribut DESC in /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:43
Stack trace:
#0 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(491): Doctrine\ORM\Query\QueryException::dqlError('SELECT orders.i...')
#1 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(764): Doctrine\ORM\Query\Parser->semanticalError('line 0, col 177...', Array)
#2 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(271): Doctrine\ORM\Query\Parser->processDeferredPathExpressions()
#3 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(359): Doctrine\ORM\Query\Parser->getAST()
#4 /Applications/MAMP/htdocs/sw56dev/vendor in /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 65

```

Wenn ich wie gesagt den dataIndex in „attribute.mein\_attribut“ ändere, sieht es so aus:

Request-Adresse:

[http://localhost:8888/sw56dev/backend/Order/getList?\_dc=1566907957564&page=1&start=0&limit=20&sort=[{"property"%3A"attribute.mein\_attribut"%2C"direction"%3A"ASC"}]](http://localhost:8888/sw56dev/backend/Order/getList?%5C_dc=1566907957564&page=1&start=0&limit=20&sort=%5B%7B%22property%22%3A%22attribute.mein%5C_attribut%22%2C%22direction%22%3A%22ASC%22%7D%5D)

Fehlermeldung:

```
Fatal error: Uncaught Doctrine\ORM\Query\QueryException: SELECT orders.id FROM Shopware\Models\Order\Order orders LEFT JOIN orders.attribute attribute WHERE orders.number IS NOT NULL AND orders.status != :cancelStatus ORDER BY attribute.mein_attribut ASC in /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:43
Stack trace:
#0 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(491): Doctrine\ORM\Query\QueryException::dqlError('SELECT orders.i...')
#1 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(764): Doctrine\ORM\Query\Parser->semanticalError('line 0, col 180...', Array)
#2 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(271): Doctrine\ORM\Query\Parser->processDeferredPathExpressions()
#3 /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(359): Doctrine\ORM\Query\Parser->getAST()
#4 /Applications/MAMP/htdocs/sw56dev/vend in /Applications/MAMP/htdocs/sw56dev/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 65

```

Falls ich dich falsch verstanden habe, gib mir nochmal einen Hinweis, was du genau sehen willst 🙂
