Symfony Doctrine将Country作为数组

时间:2016-08-10 15:19:54

标签: php symfony doctrine-orm doctrine

以某种方式可以使用Doctrine获取数组数组吗?

在本例中,我希望国家/地区应该是一个数组。

$user['country']['name'] 

or

$user['country']['cid']

我当前的要求:

    $query = $this->createQueryBuilder('u')
        ->select('u')
        ->getQuery();
    return $query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

我只在这里得到了Id。

使用yml:

的Doctrine实体

用户:

TestBundle\Entity\User:
    type: entity
    table: user
    repositoryClass: TestBundle\Entity\UserRepository
    id:
        uid:
            type: integer
            nullable: false
            unsigned: true
            id: true
            generator:
                strategy: IDENTITY
    fields:
        firstname:
            type: string
            nullable: true
            length: 255
            fixed: false
        lastname:
            type: string
            nullable: true
            length: 255
            fixed: false
        email:
            type: string
            nullable: true
            length: 255
            fixed: false
    oneToOne:
        country:
            targetEntity: Country
            joinColumn:
                name: country
                referencedColumnName: cid
    lifecycleCallbacks: {  }

国家:

TestBundle\Entity\Country:
    type: entity
    table: country
    repositoryClass: TestBundle\Entity\CountryRepository
    id:
        cid:
            type: integer
            nullable: false
            unsigned: false
            id: true
            generator:
                strategy: IDENTITY
    fields:
        cid:
            type: integer
            nullable: true
            unsigned: false
            options:
                default: 0
        name:
            type: string
            nullable: true
            length: 255
            fixed: false
    lifecycleCallbacks: {  }

这取决于我的例子中的速度,因为我有大约10 000个对象。

另一种解决方案是,编写一个SQL语句,有很多“连接” 因为上面这个例子只是一个缩短的例子,我有大约7个这样的列,比如“group”等。

1 个答案:

答案 0 :(得分:1)

您可以简单地使用对象,而不是为数组加水。然后,您可以通过应在模型类中定义的getter访问Country属性。如果你真的需要一个数组,你可以使用php填充它们。

但是如果你真的需要速度,你应该考虑使用原始的select语句,无论复杂程度如何,都可以比Doctrine更好地进行优化。