2013-02-05 105 views
0

我有一些类别和项目给他们。我希望能够只删除尚未设置项目的类别。例如,我有书籍类别,但没有添加具体书籍,因此我可以将其删除。我有食品类,因为它有比萨饼,三明治,苹果 - 所以我不能删除它。我在想如何最好的做到这一点。会员筛选在树枝

<table class="table table table-striped spacer"> 
    {% for c in cat %} 
     <tr> 
      <td> 
       {# If in edit mode, display edit form #} 
       {% if id == c.id %} 

       <form class="form-inline" action="{{ path('edit_category', {'id': c.id}) }}" method="post" {{ form_enctype(form) }}> 

        {% form_theme form 'EMBudgetTrackerBundle:Forms:inputs.html.twig' %} 

        {% for field in form %} 
        {{ form_row(field) }} 
        {% endfor %} 

        <button type="submit" class="btn"><i class="icon-ok"></i></button> 

       </form> 

       {# Else display the name #} 
       {% else %} 
        {{ c.name }} 
        <a href="{{ path('edit_category', {'id': c.id}) }}"><i class="icon-pencil"> </i></a> 
        <a href="{{ path('delete_category', {'id': c.id}) }}"> <i class="icon-remove"></i></a> 
       {% endif %} 
      </td> 
     </tr> 
    {% endfor %} 
</table> 

这是我为每个类别所做的。我想要的是如果有添加项目,不提供删除链接。我能想到的唯一的事情是有两个数组 - 一个是带有项目的类别,另一个是没有项目的类别,还有两个数组是用于循环的。但是这会导致代码重复 - 一切都会一样,只有一个循环不会有<a href="{{ path('delete_category', {'id': c.id}) }}"> <i class="icon-remove"></i></a>这一行,它看起来不是很优雅。我在想像

if(c.name not member of array_with_categories_without_items) 
then display the delete link 

但我不知道是否有办法做到这一点。有人能给我一些想法吗?非常感谢您提前! :)

回答

1

根据您的应用程序,您可以执行几项操作。

我的选择是显示所有类别的删除链接并在您的实际删除页面上进行验证。这有几个额外的好处:

  • 让你想想页删除这个逻辑。很多人被隐藏在链接中,当用户去删除一个类别时,他们忘记了实际检查逻辑。这意味着,如果他们手动更改删除链接以包含具有项目的类别的ID,则您的应用程序会很乐意将其删除。
  • 降低整个应用程序的复杂性。并非简单的MySQL查询会使您的应用程序更加复杂,但它绝对有助于视图层在没有条件逻辑的情况下显示链接,使其更清洁一些。
  • 减少服务器负载。在打印删除链接之前,您不必检查每个类别的儿童(尽管取决于您的设置,这可能是一种便宜的操作)
  • 它可以让用户知道正在发生什么。否则,如果不知道你的应用程序内外,他们会问为什么没有删除链接。有一个删除链接,如果点击该链接会显示错误,将告诉他们如果他们想要删除某个类别,则需要删除所有子项。

有了这样说,你可以这样做:

SELECT 
    c.category_name, 
    c.category_id, 
    COUNT(f.food_id) AS children 
FROM 
    categories c 
    LEFT JOIN food f ON (c.category_id = f.food_id) 
GROUP BY 
    c.category_id 

这显然是采取了猜测你的数据库结构,但会得到你的类别清单与孩子的计数对于每个

+0

非常感谢您的想法! :) – Faery