1

For some reason Sprout Forms entries will not accept the usual order by field handle setup. When I want to order the contact entries by address for instance:

{% for formEntry in craft.sproutForms.entries.formHandle('contact').order('address') %}
    {{formEntry.address}}
{% endfor %}

I get the error:

Column not found: 1054 Unknown column 'address' in 'order clause'

This field does exist. If I remove 'order', it parses the field

2
  • Apparently Sprout Forms has its own DB table. So not under 'craft_content' but under 'craft_sproutformscontent_contact' when the form is 'contact. Maybe that is the cause?'
    – noregt
    Commented Jan 6, 2016 at 10:08
  • Been trying it with mysql in Twig like "SELECT * FROM craft_sproutformscontent_contact ORDER BY craft_sproutformscontent_contact.field_address ASC" but I was not able to get the right syntax in twig
    – noregt
    Commented Jan 15, 2016 at 17:42

2 Answers 2

2

This will now work as of Sprout Forms v2.2.0:

{# Ordering #}
{% for formEntry in craft.sproutForms.entries.formHandle('contact').order('address desc') %}
  ...
{% endfor %}

{# Filtering #}
{% for formEntry in craft.sproutForms.entries.formHandle('contact').firstName('Zoe') %}
  ...
{% endfor %#}
2
  • I've updated, but can't test it because now it produces an error in the assets field. see my support mail
    – noregt
    Commented Feb 5, 2016 at 9:38
  • 1
    Updated to 2.2.1 and everything works like expected now :-)
    – noregt
    Commented Feb 6, 2016 at 10:39
2
+50

It seams, that the columns for the form values are not part of the sql, that's why it never will work like this. Maybe it works in upcomming versions of the Sprout Forms plugin.

As a workaround you can use the SuperSort Plugin. With this plugin it's possible to sort your form entries like you need it.

Step 1 -> Download and Install SuperSort Plugin -> https://topshelfcraft.com/lagniappe/supersort Step 2 -> Filter your form entries like this:

{% set formEntries = craft.sproutForms.entries.formHandle('contact')%}    
{% set formEntriesSort = formEntries | supersort('sortAs', '{address | lower}') %}

{% for formEntry in formEntriesSort %}
   {{ formEntry.address }}<br>
{% endfor %}

Like this it should work!

5
  • This works! How is it that Sprout Forms entries are not part of sql? Could you explain this a bit more and why supersort does work? I'm trying to understand this...
    – noregt
    Commented Jan 18, 2016 at 11:17
  • Also what does 'sortAs' do (not explained on the plugin page)? Sorry for the basic questions.
    – noregt
    Commented Jan 18, 2016 at 11:24
  • Maybe because of better performance the SQL does not include all the fields. But normaly the plugin should add the fields automaticly if you add such a field as orderBy statement. For deeper understanding you need to analyze the code. Have you tried to contact the Sprout Form Support about this issue? Maybe it's a bug...
    – Tom Bauer
    Commented Jan 18, 2016 at 21:52
  • About the sortAs option: Like i understand*, supersort render first the given Twig-Variable (the second parameter) for all your form.address values and after it use a simple php sort (php.net/manual/en/function.sort.php) for sorting these values and the associated Array. *i did not a deep review of the plugin...
    – Tom Bauer
    Commented Jan 18, 2016 at 22:03
  • 1
    Just got an answer from the developers and it's a bug indeed. Will be fixed in the next release, thanks for the help!
    – noregt
    Commented Jan 20, 2016 at 20:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.