Skip to content
Snippets Groups Projects
Commit eca53ed3 authored by Laurent's avatar Laurent
Browse files

hotline #151401 Improve CodifThesaurus::findParent performance

parent 42939c94
Branches
Tags
1 merge request!4378hotline #151401 multiple performance improvements
......@@ -225,12 +225,13 @@ class CodifThesaurusLoader extends Storm_Model_Loader {
public function findParent($id_thesaurus) {
$parent_str = substr($id_thesaurus, 0, strlen($id_thesaurus) - (4 - strlen($id_thesaurus) % 4));
$parent_str = substr($id_thesaurus,
0,
strlen($id_thesaurus) - Class_CodifThesaurus::ID_KEY_LENGTH);
if (!$parent_str)
return null;
$parent = Class_CodifThesaurus::findFirstBy(['where' => 'id_thesaurus like "'.$parent_str.'%" and LENGTH(id_thesaurus)<'.strlen($id_thesaurus),
'order' => 'id_thesaurus desc']);
$parent = Class_CodifThesaurus::findFirstBy(['id_thesaurus' => $parent_str]);
if (!$parent)
return $this->findParent($parent_str);
......@@ -887,8 +888,8 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
public function getParentId() {
return $this->getParent()
? $this->getParent()->getId()
return ($parent = $this->getParent())
? $parent->getId()
: null;
}
......
......@@ -87,19 +87,25 @@ class CodifThesaurusCommonTest extends ModelTestCase {
/** @test */
public function libelleHierarchiqueForCultureShouldBeConfGesticulee() {
$this->onLoaderOfModel('Class_CodifThesaurus')
->whenCalled('findParent')
->with('THEM000100503000')
->answers(Class_CodifThesaurus::newInstanceWithId(70,['id_thesaurus'=>'THEM00010050'])->setLibelle('Spectacles'))
$this->fixture(Class_CodifThesaurus::class,
['id' => 20,
'id_thesaurus'=>'THEM0001',
'libelle' => 'Culture']);
$this->fixture(Class_CodifThesaurus::class,
['id' => 70,
'id_thesaurus'=>'THEM00010050',
'libelle' => 'Spectacles']);
->whenCalled('findParent')
->with('THEM00010050')
->answers(Class_CodifThesaurus::newInstanceWithId(20,['id_thesaurus'=>'THEM0001'])->setLibelle('Culture'));
$gesticule = $this->fixture(Class_CodifThesaurus::class,
['id' => 10,
'id_thesaurus'=>'THEM0001005066663000',
'libelle' => 'Conférences Gesticulées']);
$this->assertEquals('Culture : Spectacles : Conférences Gesticulées',
Class_CodifThesaurus::getLibelleHierarchique(Class_CodifThesaurus::newInstanceWithId(10,['id_thesaurus'=>'THEM000100503000'])->setLibelle('Conférences Gesticulées')));
Class_CodifThesaurus::getLibelleHierarchique($gesticule));
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment