[英]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 %}
<?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>
<?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.