Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让symfony doctrine findAll返回具有特定键类型的数组_Symfony_Doctrine - Fatal编程技术网

让symfony doctrine findAll返回具有特定键类型的数组

让symfony doctrine findAll返回具有特定键类型的数组,symfony,doctrine,Symfony,Doctrine,我正在寻找一种优雅的方法来重新构造Symfony findAll使用特定键返回的数组。例如,如果我有一个实体动物,它有id、name、color等字段。我想创建一个repository方法,返回一个包含所有动物的数组,每个动物的键都是“name”字段,这样我就可以在这个数组中进行查找。我现在的做法是迭代数组并创建一个新的数组,但我想知道是否有现成的东西可以使用?不,没有任何东西像doctrine内置的那样。但是,如果返回的数组是一个实体对象数组,则可以这样做来获取动物的名称,而不是迭代有点难看的

我正在寻找一种优雅的方法来重新构造Symfony findAll使用特定键返回的数组。例如,如果我有一个实体动物,它有id、name、color等字段。我想创建一个repository方法,返回一个包含所有动物的数组,每个动物的键都是“name”字段,这样我就可以在这个数组中进行查找。我现在的做法是迭代数组并创建一个新的数组,但我想知道是否有现成的东西可以使用?

不,没有任何东西像doctrine内置的那样。但是,如果返回的数组是一个实体对象数组,则可以这样做来获取动物的名称,而不是迭代有点难看的数组:

$names = array_map(function($animal) { return $animal->getName(); }, $arrayOfAnimals);
如果返回的数组是数组数组,则可以简单地获取动物名称(如果使用数组):

然后,您可以简单地使用以下方法获得最终阵列:

$finalArrayOfAnimals = array_combine($names, $arrayOfAnimals);

不,没有比这更符合教义的了。但是,如果返回的数组是一个实体对象数组,则可以这样做来获取动物的名称,而不是迭代有点难看的数组:

$names = array_map(function($animal) { return $animal->getName(); }, $arrayOfAnimals);
如果返回的数组是数组数组,则可以简单地获取动物名称(如果使用数组):

然后,您可以简单地使用以下方法获得最终阵列:

$finalArrayOfAnimals = array_combine($names, $arrayOfAnimals);

不,有一种内在的学说,叫做索引,我也不知道很久了。检查代码示例:)

通过使用函数getAllLocationsAssoc,它将返回按location.id索引的关联数组。因此,数组的键将是db中对象的id您可以将其用作createQueryBuilder函数中的第二个参数。

class LocationRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllLocationsAssoc(): array
    {
        return $this->createQueryBuilder('location', 'location.id') 
            ->getQuery()
            ->getArrayResult();
    }

}
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
 * Class CityRepository
 * @package AppBundle\Repository
 */
class CityRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllCitiesAssoc(): array
    {
        return $this->_em->createQueryBuilder()
            ->select('c')
            ->from('AppBundle:City', 'c', 'c.name') // Third parameter is index-by
            ->getQuery()
            ->getResult();
    }
}
另一个选项是在->from qb函数中指定为第三个参数。

class LocationRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllLocationsAssoc(): array
    {
        return $this->createQueryBuilder('location', 'location.id') 
            ->getQuery()
            ->getArrayResult();
    }

}
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
 * Class CityRepository
 * @package AppBundle\Repository
 */
class CityRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllCitiesAssoc(): array
    {
        return $this->_em->createQueryBuilder()
            ->select('c')
            ->from('AppBundle:City', 'c', 'c.name') // Third parameter is index-by
            ->getQuery()
            ->getResult();
    }
}

不,有一个内置的原则,叫做索引,我也很长时间不知道这一点。检查代码示例:)

通过使用函数getAllLocationsAssoc,它将返回按location.id索引的关联数组。因此,数组的键将是db中对象的id您可以将其用作createQueryBuilder函数中的第二个参数。

class LocationRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllLocationsAssoc(): array
    {
        return $this->createQueryBuilder('location', 'location.id') 
            ->getQuery()
            ->getArrayResult();
    }

}
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
 * Class CityRepository
 * @package AppBundle\Repository
 */
class CityRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllCitiesAssoc(): array
    {
        return $this->_em->createQueryBuilder()
            ->select('c')
            ->from('AppBundle:City', 'c', 'c.name') // Third parameter is index-by
            ->getQuery()
            ->getResult();
    }
}
另一个选项是在->from qb函数中指定为第三个参数。

class LocationRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllLocationsAssoc(): array
    {
        return $this->createQueryBuilder('location', 'location.id') 
            ->getQuery()
            ->getArrayResult();
    }

}
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
 * Class CityRepository
 * @package AppBundle\Repository
 */
class CityRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllCitiesAssoc(): array
    {
        return $this->_em->createQueryBuilder()
            ->select('c')
            ->from('AppBundle:City', 'c', 'c.name') // Third parameter is index-by
            ->getQuery()
            ->getResult();
    }
}