2015-09-17 75 views
2

如何在symfony 2中處理一個返回實體對象的原始數據?symfony raw sql fetch - > result as Object

我需要這個使用它與reflectionMethods(調用),它只適用於對象。

其實我收到一個數組:

stmt = $this->getDoctrine()->getEntityManager() 
      ->getConnection() 
      ->prepare('SELECT '.$neededColumns.' FROM Data '.$sql); 


     $stmt->execute(); 
     $result= $stmt->fetchAll();` 

我可以使用

  $items = $stmt->fetchAll(\PDO::FETCH_CLASS, "NameOfBundle\Entity\Content"); 

我堅持所以這將是巨大的,以得到yourside一些幫助。

+0

ReflectionMethod只取對象。那麼如何將這個結果轉化爲對象?例如:$ reflectionMethod = new ReflectionMethod('AppBundle \ Entity \ YourEntity','get'。$ soft [0]); $ i [] = $ reflectionMethod-> invoke($ yourObject); – TheTom

回答

3

如果您有權訪問Doctrine註冊中心(即您正在調用的$this->getDoctrine()),那麼您需要查看Doctrine ORM的Native SQL功能。

的文檔是相當廣泛的,但你的代碼可能會看起來像:

$em = $this->getDoctrine()->getEntityManager(); 
$rsm = new ResultSetMappingBuilder($em); 
$rsm->addRootEntityFromClassMetadata('NameOfBundle\Entity\Content', 'alias'); 

$selectClause = $rsm->generateSelectClause([ 'alias' => 'table_alias' ]); 
$sql = 'SELECT '.$selectClause.' FROM table table_alias'; 

$query = $em->createNativeQuery($sql, $rsm); 
$object = $query->getOneOrNullResult(); 

顯然$sql部分可以是任何你想要的SQL,但如果你需要加入的實體,那麼一定要使用$rsm->addJoinedEntityFromClassMetadata()方法,再次在文檔中解釋。

+0

謝謝,這對我有幫助。現在它清晰而良好的運行。 ) – TheTom

+0

謝謝!這也幫助了我。你也可以在'createNativeQuery'後通常設置參數'$ query-> setParameter('ids',$ ids);''。 –