来自Doctrine 2的错误值'getClassMetadata() - > getIdentifier()',如何或为什么?

时间:2017-03-22 12:57:35

标签: php symfony doctrine-orm doctrine

我将以下实体作为Doctrine 2中Symfony 3.2.6项目的一部分:

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use QuoteBundle\Model\SourceTrait;

/**
 * @ORM\Entity
 * @ORM\Table(name="quote")
 */
class Quote
{
    use SourceTrait;
    use TimestampableEntity;

    /**
     * @ORM\Id
     * @ORM\Column(type="integer",unique=true,nullable=false)
     * @ORM\GeneratedValue
     */
    private $quoteId;

    /**
     * @return int
     */
    public function getQuoteId(): ?int
    {
        return $this->quoteId;
    }
}

在另一个类动态中我需要获取实体的标识符(我只写了一个实体的例子 - 上面的那个 - 但这适用于我遍布的所有实体应用程序)所以我发现实现这一目标的最好方法是使用Doctrine中的getClassMetaData()方法。

这是类中的动态代码:

$modelMetaData = $em->getClassMetadata($bundleName.':'.$modelName);

例如在

中翻译
$modelMetaData = $em->getClassMetadata('QuoteBundle:Quote');

从那里我应该拥有与实体相关的所有数据。

问题之一是我们是两名开发人员,我们对getClassMetaData()的结果不同。

我在Docker中使用Docker Compose运行堆栈,它完全相同,这意味着:相同的PHP版本(7.1.2),相同的Apache版本,相同的MySQL版本(这个版本位于堆栈外的公共服务器中)和相同的Symfony库。我已经检查,双重检查和三重检查,如果有必要,可以再次检查。

对于从现在开始的例子,我将自己称为Dev1,第二个开发人员将是Dev2。

Dev1代码:

$id = $em->getClassMetadata('QuoteBundle:Quote')->getIdentifier()[0];
dump($id);

quote_id

Dev2代码:

$id = $em->getClassMetadata('QuoteBundle:Quote')->getIdentifier()[0];
dump($id);

quoteId

正如您所看到的,获得的ID是不同的,这使得代码在Dev2环境中失败,我不知道还有什么可以看,因为一切似乎都适合我。

问题是:getIdentifier()应该返回quote_id(列名)还是quoteId(映射名称)??

添加here是Dev1 dump($modelMetaData)的示例,而here是Dev2的相同示例。

0 个答案:

没有答案