我对Doctrine很新,所以对于那些经验丰富的人来说,这似乎是一个相当明显的问题.
我正在编写一个数据导入工具,必须检查每个导入的行包含有效数据.例如,Row有一个产品代码的引用,我需要检查是否存在具有该代码的预先存在的Product对象.如果不是,则将该行标记为无效.
现在我可以轻松地为每一行做这样的事情.
$productCode = $this->csv->getProductNumber();
$product = $doctrine->getRepository('MyBundle:Product')->findOneBy(array('code' => $productCode ));
Run Code Online (Sandbox Code Playgroud)
但这似乎非常低效.所以我考虑返回整个产品系列,然后在其中进行迭代.
$query = $this->getEntityManager()->createQuery('SELECT p FROM MyBundle\Entity\Product p');
$products = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
一切都很好,但后来我必须编写凌乱的循环来搜索.
两个问题:
1).我想知道我是否缺少一些实用工具方法,例如你在Magento Collections中,你可以在收集结果中搜索,而不会产生额外的数据库命中.例如,在Magento中,这将迭代集合并过滤代码属性.
$collection->getItemByColumnValue("code","FZTY444");
Run Code Online (Sandbox Code Playgroud)
2).目前我正在使用下面的查询返回一个"矩形数组".效率更高,但可能会更好.
$query = $this->getEntityManager()->createQuery('SELECT p.code FROM MyBundle\Entity\Product p');
$products = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
有没有办法返回单维数组而不必重复结果集并转换成平面数组,所以我可以在结果上使用in_array()?
doctrine-orm ×1