the*_*bry 2 php symfony doctrine-orm
我正在编写新闻通讯系统.为了发送邮件,我需要从我的数据库中获取所有电子邮件地址(当然).
所以我创建了一个自定义存储库方法,如下所示:
public function getEmailAddresses()
{
$query = $this->getEntityManager()->createQueryBuilder()
->select('u.email')
->from('AppBundle:User', 'u')
->where('u.isNewsletterSubscriber = true')
;
$results = $query->getQuery()->getResult();
$addresses = [];
foreach($results as $line) {
$addresses[] = $line['email'];
}
return $addresses;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来处理结果,以获得只包含电子邮件地址的"普通"数组.实际上,之后$query->getQuery()->getResult()
,我得到这样的东西:
'results' =>
[0] => array('email' => 'first@email.com')
[1] => array('email' => 'second@email.com')
Run Code Online (Sandbox Code Playgroud)
正如我所说,我想要这样的事情:
array('first@email.com', 'second@email.com')
Run Code Online (Sandbox Code Playgroud)
使用Doctrine2内置方法是否存在更清晰的方法?我尝试过不同的水合模式,但没有任何效果.
提前致谢 :)
你可能可以创建一个定制的保湿器,但是就像你现在的方式一样,真的没有问题.您也可以通过以下方式执行此操作:
return array_map('current', $addresses);
Run Code Online (Sandbox Code Playgroud)
return array_column($addresses, 'email');
Run Code Online (Sandbox Code Playgroud)
该array_column
功能是在PHP 5.5.0中引入的,可以满足您的需求.该array_map
函数将起作用,调用PHP的内部current
函数,它只返回当前元素的值(它始终初始化为该数组的第一个元素).
array_map
如果你有大量的行返回,请小心使用,因为它可能会更慢,它肯定会占用更多的内存,因为它必须复制数组.
归档时间: |
|
查看次数: |
457 次 |
最近记录: |