【问题标题】:Symfony2 Delete Record Entity IssueSymfony2 删除记录实体问题
【发布时间】:2013-11-10 22:31:40
【问题描述】:

在从表中删除记录时,我遇到了 Symfony2 的问题。

我有一个存储以下内容的表:purchaseOrders、purchaseOrderItems 和仓库

采购订单实体“purchaseOrders”

 id|name   |
 -----------
 1 |Test   |

仓库实体“仓库”

 id|name             |
 ---------------------
 1 |Test Warehouse   |
 2 |Test Warehouse 2 |

采购订单表项目实体“purchaseOrderItems”

 id|name        |purchaseOrder_id|warehouse_id
 --------------------------------
 1 |Test Item 1 |1               |1
 2 |Test Item 2 |1               |1
 3 |Test Item 3 |1               |2

purchaseOrder_id 是多对一关系,链接到名为“purchaseOrders”的表。 warehouse_id 是一个多对一关系,链接到一个名为“仓库”的表。

我的 view.html.twig 页面布局如下:

 PurchaseOrder
 --------------------------------------
 | | Item         | Warehouse
 --------------------------------------
 |1| Test Item 1  | Test Warehouse
 |2| Test Item 2  | Test Warehouse
 |3| Test Item 3  | Test Warehouse 2

如果我从“仓库”表中删除记录 #1,我会在 view.html.twig 模板中收到错误

  An exception has been thrown during the rendering of a template ("Entity was not found.") in /Applications/XAMPP/xamppfiles/htdocs/symfonydev/src/WIC/PurchaseOrderBundle/Resources/views/PurchaseOrder/view.html.twig at line 320.

问题是因为当树枝模板试图访问仓库“名称”时,它无法在对象中找到它来呈现它......

我尝试了以下条件语句,但没有任何效果,我仍然得到同样的错误:

 {% if purchaseOrderItems.warehouses.name != null %}
      {{ purchaseOrderItems.warehouses.name }}
 {% endif %}

 {% if purchaseOrderItems.warehouses.name is defined %}
      {{ purchaseOrderItems.warehouses.name }}
 {% endif %}

 {% if purchaseOrderItems.warehouses.name is not null %}
      {{ purchaseOrderItems.warehouses.name }}
 {% endif %}

我需要知道的是:

当我删除“仓库”时,我如何才能使“purchaseOrderItems”与“仓库”的关系不会中断或将 Null 或 0 放入值中。

问题一定是purchaseOrderItems无法映射到仓库,因为记录已被删除。

请帮助或建议我需要做些什么来防止这种情况发生。

非常感谢!

【问题讨论】:

    标签: php mysql sql entity-framework symfony


    【解决方案1】:

    第一个错误,twig error,你应该这样写

    {% if purchaseOrderItems.warehouses %}
      {{ purchaseOrderItems.warehouses.name }}
    {% endif %}
    

    那么你的问题:

    我没有找到一种教义可以自动完成的方法。

    所以在你移除一个仓库的时候,只需将purchaseOrder中的仓库设置为null即可。毕竟,这是个坏主意,你会弄乱你的数据。

    【讨论】:

    • 但是如果这个仓库也在其他表中怎么办,我有大约 20 个这个 id 可能存在的地方。我是否也需要手动将它们设置为空?我认为 Doctrine/ORM 能够比手动过程更好地处理这个问题。顺便说一句,谢谢你的帮助!
    【解决方案2】:

    不要在 Twig 中使用 warehouses.name,而是尝试使用 leftJoin 创建一个 QueryBuilder,如下所示:

    $q = $repository->createQueryBuilder('p', 'w')->leftJoin('p.warehouse', 'w');
    $columns = array('p.id', 'p.name', 'w.name as warehouse');
    $products = $q->select($columns)->getQuery()->getResult();
    

    那么你应该得到 NULL 正如你所期望的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      相关资源
      最近更新 更多