Доктрина DQL, правильно выбирающая всю сущность со всеми ссылками и полями

Как можно получить объект с помощью DQL и правильно получить все поля и ссылки?
Когда я использую следующий оператор для получения списка сущностей:

return $this->orm->createQuery('SELECT pp FROM PagePlugin pp where pp.page = :page')->setParameter('page', $page)->getResult();

Я получу список PagePlugins, где каждый PagePlugin имеет одну ссылку на Plugin:

/**
* @var \Plugin
*
* @ORM\ManyToOne(targetEntity="Plugin", inversedBy="pagePlugin", cascade={"persist"})
* @ORM\JoinColumns({
*   @ORM\JoinColumn(name="plugin_id", referencedColumnName="plugin_id", onDelete="CASCADE")
* })
*/
private $plugin;

При переборе результата результат Plugin Сущность, которая связана с PagePlugins, не имеет имени:

$pagePlugin->getPlugin()
DoctrineProxies\__CG__\Plugin::__set_state(array(
'__initializer__' =>
Closure::__set_state(array(
)),
'__cloner__' =>
Closure::__set_state(array(
)),
'__isInitialized__' => false,
'pluginId' => 7,
'pluginName' => '',
'pagePlugin' => NULL,
'pluginMappingValue' => '',
'allowedPlugin' => 0,
'mainEntity' => 0,
'autoCompleteIgnorePlugin' => 0,
))

Когда я обновляю объект:

        $ref = $pagePlugin->getPlugin();
$test = ORM::getDefaultOrm();
$test->refresh($ref);

Имена будут выбраны:

$ref = {DoctrineProxies\__CG__\Plugin} [11]
lazyPropertiesDefaults = {array} [0]
__initializer__ = {Closure} [3]
__cloner__ = {Closure} [3]
__isInitialized__ = true
*Plugin*pluginId = 7
*Plugin*pluginName = "Header"*Plugin*pagePlugin = {Doctrine\ORM\PersistentCollection} [9]
*Plugin*pluginMappingValue = "Header"*Plugin*allowedPlugin = null
*Plugin*mainEntity = null
*Plugin*autoCompleteIgnorePlugin = null

Можно ли указать в DQL, что Doctrine нужно извлекать плагин целиком, и почему Doctrine извлекает этот объект частично?

0

Решение

Если вы хотите получить Plugin Также вам нужно сделать так называемое извлечение соединения. Вы можете прочитать о получении присоединения здесь, в главе документации Doctrine2 14.2.2. присоединяется:

Выбрать присоединения: В дополнение к использованию регулярных объединений: Используется для извлечения связанных сущностей и включения их в гидратированный результат запроса.

В вашем случае вы должны использовать запрос как таковой для выполнения выборочного соединения:

$this->orm->createQuery('SELECT pp, p FROM PagePlugin pp JOIN pp.plugin p WHERE pp.page = :page')->setParameter('page', $page)->getResult();
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]