symfony - How to use service method in Doctrine QueryBuilder -


i'm doing quite big symfony2 project (unfortunately on database structure cannot modify) , i'm stuck this:

i have user entity contains (amongst other fields) username field.

i have profilefield entity corresponds fields user (like firstname or lastname, favourite color or whatever ask user about).

finally there configservice, get's value key database. in particular case it's little config value called 'username_format'. can take 1 of 3 values: 'username', 'firstname' or 'firstnamelastname'.

depending on value need display formatted username. if value 'username' - i'm returning username field value user entity. both 2nd , 3rd case, when need custom profilefield corresponding particular user, i've created simple service (called usernameformatservice) has configservice injected , method called getnamefromid($userid). method checks config value , pulls correct values correct user. works nice, but...

i have blog overview page, in formatted username shown amongst other fields (like title, creation date etc). blog entity has manytoone relationship user entity. mapping i'm getting username of course, , if 'username_format' config value says need firstname example, i'm pulling usernameformatservice inside twig template , working should.

the real problem starts when need able sort each column, means formatted username column also. i'm using doctrine querybuilder fetch db results, , need formatted username value somewhere inside user entity (i think) able sort blogs value before pulled database (why before? pagination).

can give me @ least hint or how it?

update:

to make more clear maybe:

right user name displayed in overview table being resolved usernameformatservice, uses configservice 'platform_username_format' config value form database and, depending on config value, returns formatted user name. if comes sorting, need somehow formatted username before query database, can sorted results.

ok, if understood correctly here, written below.

now, not sure of if each user has option choose how view data. therefore, hardcoded username_format in service definition behavior altered.

1. configservice

i change getnamefromid getnameforuser:

class configservice{     private $usernameformat;     private $repository;      public function __construct($repository, $usernameformat){         $this->repository = $repository;         $this->usernameformat = $usernameformat;     }      public function getnameforuser(user $user){         switch ($this->usernameformat){             case "username":                 return $user->getusername();             case "firstname":                 return $user->getfirstname();             case "firstnamelastname":                 reteurn $user->getfirstname() . ' ' . $user->getlastname();         }     }      public function getallusers($page){          return $this->repository->getusers($page, $this->usernameformat);     } } 

2. configservice definition

<parameters>     <parameter key="my.repository.class">your\namespace\foorepository</parameter>     <parameter key="config.service.class">your\namespace\service\configservice</parameter> </parameters>  <services>     <service id="user.repository"              class="%my.repository.class%"              factory-service="doctrine.orm.entity_manager"              factory-method="getrepository">             <argument>yourbundle:user</argument>     </service>      <service id="config.service" class="%config.service.class%">         <argument type="service" id="my.repository.class" />         <argument type="string">username</argument>     </service> </services> 

3. repository

public userrepository extends entityrepository{     public function getusers($page, $usernameformat){         $qb = $this->createquerybuilder('u');          /**          * rest of quering rules go here: predicate, ordering, pagination          */           return $qb->getquery()->getresult();        } } 

hope helps bit...


Comments

Popular posts from this blog

java - WrongTypeOfReturnValue exception thrown when unit testing using mockito -

php - Magento - Deleted Base url key -

android - How to disable Button if EditText is empty ? -