Symfony2 Doctrine连接对象的数组

时间:2015-02-01 17:08:01

标签: php mysql arrays symfony doctrine

我有以下存储库:

class CustomerRepository extends EntityRepository
{
public function searchCustomer($criteria)
    {
    $q = $this->createQueryBuilder('c');
        $q->join('TeamERPCustomerBundle:Company', 'o', 
                    'WITH', 'c.company = o.id');
    if (isset($criteria) and $criteria!=""){
        $q->orWhere(sprintf("c.customer_name like '%s'", '%'.$criteria.'%'));
    (...)
    }
        $q = $q->getQuery()->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);
        return $q;
    }
}

我从控制器调用它如下:

            $result = $this->getDoctrine()->getManager()
                ->getRepository('TeamERPCustomerBundle:Customer')
                ->searchCustomer($customerInfo);

它返回一个元素数组,如下所示:

array (size=20)
  0 => 
array (size=9)
  'id' => int 1
  'customer_name' => string 'Abel' (length=4)
  'address' => string 'Calle 52 # 60, % 3era y G. Quezada, Nuevo Sosa' (length=46)
  'postal_address' => string '75100' (length=5)
  'city_town_village' => string 'Las Tunas' (length=9)
  'e_mail' => string 'abel@ltu.sld.cu' (length=15)
  'land_line' => string '346386' (length=6)
  'cell_phone' => null
  'fax' => null
  1 => 
array (size=2)
  'id' => int 1
  'company_name' => string 'Debswana' (length=8)
  2 => 
array (size=9)
  'id' => int 2
  'customer_name' => string 'Kay' (length=3)
  'address' => null
  'postal_address' => null
  'city_town_village' => null
  'e_mail' => null
  'land_line' => null
  'cell_phone' => null
  'fax' => null
  3 => 
array (size=2)
  'id' => int 3
  'company_name' => string 'DTC' (length=3)
(...)

它为每个对象提供了一个数组元素,但我希望它是经典的mysql连接;结果是相同类型的元素数组。像mergin元素1和2一样的东西。

此查询的另一个问题是,它不像经典的连接醚那样工作,它为所有客户提供服务,但只提供不重复的公司。

任何人都可以帮我获得一系列统一的元素吗?

编辑:我找到了解决方案:

        $em = $this->getEntityManager();

    $query = $em->createQuery('
        SELECT c, i
        FROM TeamERPCustomerBundle:Customer c
        JOIN c.company i');

    //$query->setParameter('id', '1'); With this is can add as many parameter as I need

    return $query->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);

返回的内容如下:

array (size=11)
  0 => 
array (size=10)
  'id' => int 1
  'customer_name' => string 'Abel' (length=4)
  'address' => string 'Calle 52 # 60, % 3era y G. Quezada, Nuevo Sosa' (length=46)
  'postal_address' => string '75100' (length=5)
  'city_town_village' => string 'Las Tunas' (length=9)
  'e_mail' => string 'abel@ltu.sld.cu' (length=15)
  'land_line' => string '346386' (length=6)
  'cell_phone' => null
  'fax' => null
  'company' => 
    array (size=2)
      'id' => int 1
      'company_name' => string 'Debswana' (length=8)

正如您可能已经意识到的那样,这个阵列与我之前的阵列不同。所以现在我只需要通过数组并将其更改为我想要的内容。例如:

           foreach ($result as $key => $value){
               $result[$key]['company'] = $value['company']['company_name'];
           }

现在我们正在谈论。这就是我想要的东西:

array (size=11)
  0 => 
array (size=10)
  'id' => int 1
  'customer_name' => string 'Abel' (length=4)
  'address' => string 'Calle 52 # 60, % 3era y G. Quezada, Nuevo Sosa' (length=46)
  'postal_address' => string '75100' (length=5)
  'city_town_village' => string 'Las Tunas' (length=9)
  'e_mail' => string 'abel@ltu.sld.cu' (length=15)
  'land_line' => string '346386' (length=6)
  'cell_phone' => null
  'fax' => null
  'company' => string 'Debswana' (length=8)

0 个答案:

没有答案