2013-11-10 3 views
1

У меня проблема с Symfony2, когда дело доходит до удаления записи из таблицы.Symfony2 Удалить запись Entity Issue

У меня есть таблица, в которой хранятся следующие: purchaseOrders, purchaseOrderItems и склады

Купить Заказать Entity "purchaseOrders"

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

Склады Entity "склады"

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». Склад_ид - это много-одно отношение, связанное со столом, называемым «склады».

Моя страница 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. 

проблема в том, что, когда шаблон веточки пытается получить доступ на складе «имя» это не может найти его в объекте, чтобы сделать его ...

Я попробовал следующий условный statemen ц и ничего не работает, я до сих пор получить ту же ошибку:

{% 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» отношения на «склад» не ломается или помещает нуль или 0 в значение.

Проблема должна заключаться в том, что покупка не может сделать сопоставление на складе, поскольку запись была удалена.

Просьба помочь или сообщить, что мне нужно сделать, чтобы это не происходило.

Большое спасибо!

ответ

0

Первая ошибка, ошибка веточка, вы должны написать как этот

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

Тогда ваш вопрос:

я не найти способ, что доктрина может сделать это автоматически.

Так что просто установите склад в PurchaseOrder равным null при удалении одного склада. В конце концов, это плохая идея, вы испортите вам данные.

+1

Но что, если этот склад находится в других таблицах, у меня есть что-то вроде 20 мест, которые этот идентификатор мог бы существовать. Нужно ли вручную устанавливать их как нулевые? Я бы подумал, что Doctrine/ORM сможет справиться с этим намного лучше, чем ручной процесс. Btw, спасибо за помощь! – LargeTuna

0

Вместо приближающихся складов.имя в Twig, попытайтесь создать QueryBuilder с LeftJoin так:

$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 так же, как вы ожидали.