簡體   English   中英

一對多關系在Symfony2應用程序中未顯示多個條目

[英]One-to-Many Doctrine relationship not displaying more than one entry in Symfony2 Application

背景

我正在為一個客戶端運行Symfony2應用程序,該應用程序跟蹤AED(除顫器),其維護記錄以及負責維護的人員。 我正在測試版發布中,並且遇到了與Doctrine實現的一對多雙向關系的問題。

該項目是對自定義開發框架上的先前架構的轉換。 這意味着我曾經

架構

關系結構是一種“自上而下的方法”,其中AED的組織方式如下:

Municipalities
    one-to-many-> Organizations
        one-to-many-> Locations
            one-to-many-> AEDs
                one-to-many-> Monthly Check Logs
                one-to-many-> Maintenance Records
            one-to-many-> Persons
                one-to-many-> Contact Entries

(這已簡化,但應該為您遇到的問題提供足夠的背景信息。)

問題

我正在顯示一個“用戶配置文件”,其中所有相關的聯系人條目都在表中列出。 問題是當添加新條目時,表中僅顯示(最新)條目。 其他的仍然存儲在數據庫中,但是由於某種原因被隱藏了。

所需

調試步驟

我將生產數據庫克隆到暫存環境中,然后復制了問題。

我嘗試將獲取模式強制設置為EAGER ,但仍然遇到相同的問題。

我檢查了person.contacts的長度,結果為1。

我嘗試將可運行的渴望查詢直接帶入數據庫(如下所示),並導致多個條目(大於1)的結果:

SELECT 
  t0.table_id AS table_id1, 
  t0.ref_id AS ref_id2, 
  t0.person_id AS person_id3, 
  t0.contact_type AS contact_type4, 
  t0.contact_place AS contact_place5, 
  t0.contact AS contact6, 
  t0.contact_id AS contact_id7, 
  t0.person_id AS person_id8 
FROM 
  supContact t0 
WHERE 
  t0.person_id = 1490

我不確定如何從此處進行調試。 所需的功能當然是要顯示多個條目。

編碼

控制器片段

public function showAction($personId = 0, $organizationId = 0)
    {
        $person = $this->getDoctrine()
                        ->getRepository('AEDTracker:Genperson')
                        ->find($personId);

        return $this->render('AEDTracker:Personnel:show.html.twig', array(
            'person' => $person,
            'organizationId' => $organizationId,
        ));
    }

樹枝模板片段

    {% if person.contacts is empty %}
    <tr><td colspan="100">No entries</td></tr>
    {% else %}
      {% for item in person.contacts %}
        <tr class="contact_edit" module="contact" name="{{ item.contactId }}">
           <td></td>
           <td>{{ item.contactType }}</td>
           <td>{{ item.contactPlace }}</td>
           <td>{{ item.contact }}</td>
           <td><a href="{{ path('personnelEditContact', { 'contactId': item.contactId, 'organizationId': organizationId }) }}">Edit</a></td>
        </tr>
       {% endfor %}
     {% endif %}

Genperson.orm.xml

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="AED\Tracker\Entity\Genperson" table="genPerson">
    <id name="personId" type="integer" column="person_id">
      <generator strategy="IDENTITY"/>
    </id>

    <!-- Skipped unimportant fields -->

    <one-to-many field="contacts" target-entity="Supcontact" mapped-by="person" fetch="EAGER" />
  </entity>
</doctrine-mapping>

Supcontact.orm.xml

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="AED\Tracker\Entity\Supcontact" table="supContact">
    <id name="contactId" type="integer" column="contact_id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="personId" type="integer" column="person_id" nullable="true" />

    <!-- Removed unimportant fields -->

    <many-to-one field="person" target-entity="Genperson" inversed-by="contacts">
        <join-column name="person_id" referenced-column-name="person_id" />
        <cascade>
            <cascade-persist />
            <cascade-merge />
        </cascade>
    </many-to-one>
  </entity>
</doctrine-mapping>

任何幫助將不勝感激。

像一個愚蠢的人一樣,我沒有為此嘗試嘗試一些顯而易見的事情。

Symfony 2.3和2.4之間必須存在一個錯誤,因為更新完全解決了此問題。

對於那些可能會偶然發現的人,要進行更新,必須將此處的新composer.json文件下載到項目的根文件夾中,然后運行

php composer.phar update

所有依賴項將被更新,包括Symfony核心和Doctrine庫。 在將其推向生產環境之前,請確保進行測試。

但是,奇怪的是,我必須在我的ORM XML文件中保留fetch="EAGER"參數,以使該功能正常工作。 這可能不是一個完整的解決方案,並且其他人可能會有進一步的了解。 理想情況下,我希望應用程序繼續使用延遲加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM