HubDB filter using selectattr and foreign id for another table

SOLVE
bradhardinge
Participant

I have a page displaying data from a HubDB table. It needs to be grouped by category. The categories are stored in another HubDB table. I can get this working using multiple hubdb_table_rows functions and filtering like below:

 

 

 

hubdb_table_rows(table_id, '&category__contains=' ~ category)

 

 

 

Problem is as there are more than 10 categories  I hit the table scans limit. I'd prefer to do one hubdb_table_rows and use selectattr but I can't get this working with a foreign id column type. Any ideas?

 

 

 

rows|selectattr('category.name','contains','Category Name')

 

 

0 Upvotes
1 Accepted solution

Accepted Solutions
amwilie
Solution
Key Advisor | Elite Partner

@bradhardinge 

 

You could loop through the categories table,  within that loop through your main table, and then use an if statement to find rows containing the currently looped category.

 

{% set rows = hubdb_table_rows(tableid) %}
{% set categories = hubdb_table_rows(tableid) %}

{# Loop through categories table #}
{% for category in categories %}
  <h2>{{ category.name }}</h2>
  
  {# Loop through main table #}
  {% for row in rows %}
    {# Check if row contains category #}
    {% if category.name is within row.categories|map('name') %}
      <p>{{ row.title }}</p>
    {% endif %}
  {% endfor %}
{% endfor %}
border

Alyssa Wilie

Web Developer at LyntonWeb

If this answer solved your question, please mark it as the solution!

View solution in original post

3 Replies 3
dennisedson
Community Manager

@bradhardinge ,

Let me introduce you to @amwilie .  She is about as gifted as they come particularly around HubDB.

@amwilie what say you?

Thanks,

Dennis


We are excited to announce that the Community will be launching a weekly newsletter on November 2, 2020!
Sign up today!
0 Upvotes
amwilie
Solution
Key Advisor | Elite Partner

@bradhardinge 

 

You could loop through the categories table,  within that loop through your main table, and then use an if statement to find rows containing the currently looped category.

 

{% set rows = hubdb_table_rows(tableid) %}
{% set categories = hubdb_table_rows(tableid) %}

{# Loop through categories table #}
{% for category in categories %}
  <h2>{{ category.name }}</h2>
  
  {# Loop through main table #}
  {% for row in rows %}
    {# Check if row contains category #}
    {% if category.name is within row.categories|map('name') %}
      <p>{{ row.title }}</p>
    {% endif %}
  {% endfor %}
{% endfor %}
border

Alyssa Wilie

Web Developer at LyntonWeb

If this answer solved your question, please mark it as the solution!

View solution in original post

bradhardinge
Participant

Thanks @amwilie 🙂