2014-10-18 33 views
3

收到此错误:我可以使用ResultSetMapping-> addEntityResult()与没有数据库表的实体吗?

Class "Bundle\LeagueStanding" is not a valid entity or mapped super class. 

当我使用这个:

$sql = '......'; 

$rsm = new ResultSetMapping(); 
$rsm->addEntityResult('Bundle:LeagueStanding', 's'); 
$rsm->addFieldResult('s', 'played', 'played'); 
//........etc 
$query = $this->_em->createNativeQuery($sql, $rsm); 

return $query->getResult(); 

LeagueStanding没有一个数据库表,这就是我想保持它来执行标准化的方式(唐” t存储计算值)。是否有可能仍然使用没有数据库表的实体使用ResultSetMapping?可以这么说DTO吗?

namespace Bundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Bundle\Entity\League; 
use Bundle\Entity\Team; 
use Bundle\Entity\Season; 

class LeagueStanding 
{ 
    private $position = 0; 

    private $played = 0; 

    private $homePlayed = 0; 

    private $awayPlayed = 0; 

    private $won = 0; 

    private $homeWon = 0; 

    private $awayWon = 0; 

    private $lost = 0; 

    ................. 

    ...... 

回答

1

事实上,它看起来像ResultSetMapping只能用于现有的实体。 由于学说2.4,可以使用任何PHP类/ POPO使用“NEW” Operator Syntax

<?php 
class CustomerDTO 
{ 
    public function __construct($name, $email, $city, $value = null) 
    { 
     // Bind values to the object properties. 
    } 
} 

<?php 
$query = $em->createQuery('SELECT NEW CustomerDTO(c.name, e.email, a.city) FROM Customer c JOIN c.email e JOIN c.address a'); 
$users = $query->getResult(); // array of CustomerDTO 

You can specify any PHP class, it only requires that the constructor of this class matches the NEW statement.

随意join our discussion on these strategies PHP和领域驱动设计。

+0

确实,当时我问这个问题我不认为这个功能可用。我会将其标记为答案。 – Jonathan 2016-07-10 19:20:48

相关问题