Using column value as array index in doctrine

后端 未结 3 1066
北海茫月
北海茫月 2020-12-09 04:21

I am using doctrine 2.1 in order to create a model for settings table:

id |  arg  |  value  |  category
1  |  name |  foo    |  general_settings         


        
相关标签:
3条回答
  • 2020-12-09 04:44

    FYI when using createQueryBuilder in your EntityRepository, you can directly specify the INDEX BY along with the alias:

    $this->createQueryBuilder('p', 'p.id')
    

    This avoids handling manually the from which is automatically handled in EntityRepositories.

    0 讨论(0)
  • 2020-12-09 04:47

    Doctrine IndexBy function is used, to display column value as array index

    $this
    // database table alias
    ->createQueryBuilder( 'app_settings' )
    // first parameter should be alias and second parameter will be column name, which you want to show as array index
    ->indexBy('app_settings','app_settings.name')
    // get query
    ->getQuery()
    // get doctrine result in array format
    ->getArrayResult();
    

    The result of mentioned query will be in this format: Result of mentioned query

    0 讨论(0)
  • 2020-12-09 04:48

    I got it: the trick here is use the INDEX BY word.

    Query class

    import the Query class (no always optional):

    use \Doctrine\ORM\Query;
    

    create the query:

    $query = $this->data->em->createQuery('
        SELECT s 
        FROM models\Setting s 
        INDEX BY s.arg //to set array custom key
        WHERE s.category = :category');
    $query->setParameter('category', 'general');
    

    set the hidration mode in order to work with read-only arrays

    $settings = $query->getResult(Query::HYDRATE_ARRAY); 
    

    Display the value:

    echo $settings['desc']['value'];  // prints "bar"
    

    QueryBuilder

    With the QueryBuilder object you can set the index at the from statement:

    $qb = $em->createQueryBuilder();
    $qb->select('s');
    $qb->from('models\Settings', 's', 's.arg');  // here the magic
    $result = $qb->getQuery()->getResult();
    

    Then, you can access the object as:

    $description = $result['desc'];
    $value = $description->getValue();
    
    0 讨论(0)
提交回复
热议问题