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