2017-01-16 27 views
0

如何使用DQL獲取對象並正確獲取所有字段和引用? 當我使用下面的語句來獲取實體列表:Doctrine DQL,正確提取所有引用和字段的整個實體

我會得到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; 

當對結果進行迭代,鏈接到的PagePlugins的Plugin實體沒有一個名字:

$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該學說完全獲取插件?爲什麼教義獲取該對象的部分?

回答

3

如果您還想獲取Plugin,則需要執行所謂的讀取連接。您可以在取指加入here in the Doctrine2 documentation chapter 14.2.2. Joins閱讀:

獲取連接:除了定期加入用途:用於獲取相關的實體,包括在查詢的結果水合物。

在你的情況,你應該使用查詢作爲這樣進行抓取連接:

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