使用 doctrine2 ,我在entities
文件夹中创建了Entities
。
文件夹:
./
HelloEntity.php
WorldEntity.php
我在PHP中创建了我的结构并导入它们:
$namespaceYaml = array($connection->getBundle()->getNamespace() => $bundleFolder.'/Entity/ORM/');
$driver = new YamlDriver($namespaceYaml, '.orm.yml');
$path = $bundleFolder.'/Resource/config/doctrine/metadata/orm';
$config = Setup::createYAMLMetadataConfiguration(array($path), true);
$config->setEntityNamespaces(array($connection->getBundle()->getName() => $connection->getBundle()->getNamespace().'\Entity'));
$config->setMetadataDriverImpl($driver);
现在,它正在发挥作用。我可以使用它们。
例如:
$qb = $this->getRepository()->createQueryBuilder('Hello'); //short here but long in from()
$qb->from('MyWeb\Entities\Hello', 'h'); //Hello Entity
现在,MyWeb
是我的主要根/名称空间。当我想在我的表中使用教义时,我必须写MyWeb\Entities\Hello
。我想做的就是缩短它们。我可以 使用'Hello'
有没有人有任何想法?
答案 0 :(得分:3)
从未尝试过使用纯php的doctrine2,但这行看起来像autoloader config:
$config->setEntityNamespaces(array($connection->getBundle()->getName() => $connection->getBundle()->getNamespace().'\Entity'));
也许如果您使用目录/命名空间结构,如MyWeb \ 实体 \ Hello,它将按您的意愿工作
答案 1 :(得分:3)
现在,我在StackOverflow上的其他地方找到了答案。这不是同一个问题,但看起来它可以解决这两个问题。
很快,我们必须为表名而不是短名称使用完全限定的名称空间。但是当我们获得存储库时(除了包名称)我们可以使用短名称
参考:Doctrine DQL and Namespaces (relative only?)
现在,我找到了答案。
<强>答案强>:
我之前的解决方案是正确的。我们必须在第一个str使用完全限定的名称空间减去斜杠。
但是,我们也可以简短地使用它。
请参阅,每个entityManmager
都有一个Repository
,我们可以使用$em->getRepository()
来获取它。之后,使用createQueryBuilder('e')
(此处注意“ e ”)会自动生成HelloEntity
名称,并将其分配给e
别名。
所以,我的代码错了,无需输入命名空间:)
<强>结论强>:
而不是:
$qb = $this->getRepository()->createQueryBuilder('Hello'); //short here but long in from()
$qb->from('MyWeb\Entities\Hello', 'h'); //Hello Entity
使用此:
$qb = $this->getRepository()->createQueryBuilder('h'); //h assigned for Hello table and HelloEntity. So no need for from. It will fetch data two times then.
<强>解决强>