Кому нужно избавляться от использования пространств имен в DQL-запросах? Я хочу назначить пространство имен по умолчанию для всех запросов доктрины из моего пакета. Также будет полезно использовать пространство имен по умолчанию в построителе запросов. Я хотел бы иметь:symfony2 и doctrine2 более короткие имена объектов
$dql = "select i
from MyCompanyMySuperPuperBundle:Issue i
inner join MyCompanyMySuperPuperBundle:Tracker t with t.id = i.tracker
where t.name in (?1) and i.version = ?2";
вместо
$dql = "select i
from Issue i
inner join Tracker t with t.id = i.tracker
where t.name in (?1) and i.version = ?2";
Полный код:
namespace MyCompany\MySuperPuperBundle\Entity;
use Doctrine\ORM\EntityRepository;
class IssueRepository extends EntityRepository
{
public function findStoriesByVersion(\MyCompany\MySuperPuperBundle\Entity\Version $version)
{
$dql = "select i
from MyCompanyMySuperPuperBundle:Issue i
inner join MyCompanyMySuperPuperBundle:Tracker t with t.id = i.tracker
where t.name in (?1) and i.version = ?2";
return $this->getEntityManager()
->createQuery($dql)
->setParameter(1, array('Epic', 'Story', 'Spike', 'Extra'))
->setParameter(2, $version->getId())
->getResult();
}
}
UPDATE:
Похоже, что нет никакого способа настройки по умолчанию для префикса пакета и я должен использовать эти глупые префиксы для всех сущностей ... mo re более 200 объектов ... ok .. позволяет установить псевдоним. это было сделано с помощью:
orm:
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
mappings:
MyCompanyMySuperPuperBundle:
type: annotation
alias: xr
#auto_mapping: true
Теперь я могу использовать хг в качестве префикса
$dql = "select i
from xr:Issue i
inner join xr:Tracker t with t.id = i.tracker
where t.name in (?1) and i.version = ?2";
Но теперь прут говорил мне, что
Исключение было брошено во время рендеринга шаблона (» Неизвестное имя пространства имен псевдонима «UMyCompanyMySuperPuperBundle».) В MyCompanyMySuperPuperBundle: по умолчанию: index.html.twig в строке 7.
И я не могу использовать xr префикс для ветки - это не работает. У тебя есть идеи?
PS: Это будет идеально, если я могу использовать оба псевдонима в одном коде MyCompanyMySuperPuperBundle - полный и хт - коротка ...
UPDATE: РЕШЕНО
Это работает! Теперь я могу получить доступ к моделям через полное имя defautl и очень короткое имя. ветка с длинным именем пространства имен, так что она работает.
class MyCompanyMySuperPuperBundle extends Bundle
{
public function boot()
{
// implement alias XR for base namespace
$em = $this->container->get("doctrine.orm.entity_manager");
$config = $em->getConfiguration();
$config->addEntityNamespace("XR", "MyCompany\\MySuperPuperBundle\\Entity");
}
}
извините, вы были правы - это работает !!! ;-) благодаря –