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