-
Notifications
You must be signed in to change notification settings - Fork 72
Description
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"';