Skip to content

default sort on many_many relation table isn't clearly documented #312

@MelissaWu-SS

Description

@MelissaWu-SS

Affected Version

5.0.0

Description

I have a BlogPost DataObject that has many_many relation with TaxonomyTerm DataObject through BlogPostTaxonomyTerm as below:

private static array $many_many = [
    'Terms' => [
        'through' => BlogPostTaxonomyTerm::class,
        'from' => 'Parent',
        'to' => 'TaxonomyTerm',
    ],
];

There is a Sort field on the TaxonomyTerm DataObject and a separate Sort field on the many_many through relation DataObject BlogPostTaxonomyTerm.

I want to sort the linked TaxonomyTerms on the BlogPost based on the Sort value on the BlogPostTaxonomyTerm table. However, I am not able to do that. The Sorting result is always determined by the Sort value on the TaxonomyTerm DataObject instead.

Here is an example, I have the following fixture file for unit test:

SilverStripe\Taxonomy\TaxonomyTerm:
  term1:
    Name: term1
    Sort: 1
  term2:
    Name: term2
    Sort: 2
  term3:
    Name: term3
    Sort: 3

App\Pages\BlogPost:
  page1:
    Title: 'Blog Post 1'
    PublishDate: '2023-06-20 15:55:50'

App\Taxonomy\ThroughRelations\BlogPostTaxonomyTerm:
  blogPostTerm1:
    Parent: =>App\Pages\BlogPost.page1
    TaxonomyTerm: =>SilverStripe\Taxonomy\TaxonomyTerm.term3
    Sort: 1
  blogPostTerm2:
    Parent: =>App\Pages\BlogPost.page1
    TaxonomyTerm: =>SilverStripe\Taxonomy\TaxonomyTerm.term2
    Sort: 2
  blogPostTerm3:
    Parent: =>App\Pages\BlogPost.page1
    TaxonomyTerm: =>SilverStripe\Taxonomy\TaxonomyTerm.term1
    Sort: 3

And I want to test the first term of the App\Pages\BlogPost.page1.
The expected result is the first term should be "term3", however the actual first term is "term1".

After I add the following config to the BlogPostTaxonomyTerm many_many relation, the Sorting works as expected.

 private static string $default_sort = '"BlogPostTaxonomyTerm"."Sort"';

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions