想要更清洁地解决问题

时间:2013-09-26 13:45:40

标签: php symfony doctrine twig

我不确定这个问题是否在这里,所以如果不是,请原谅我,我会将其删除。

我正在使用Symfony2,Twig和Doctrine。我正在开发一个ToDo App作为练习,网页看起来像这样:

Today (5 tasks)
- Work (2 tasks)
  - clean the desk
  - write report
- Home (3 task)
  - Pay (2 tasks)
    - Internet
    - Electricity
  - Buy (1 task)
    - Eggs

Completed (1 task)
- Work 
  - Talk to boss

我有类别(工作和家庭),子类别(支付和购买)和具有状态的任务(已完成或未完成)

我的问题是计算剩余的任务。

因为数字显示在任务之前,为了解它,我做了类似的事情:

 for each main_category
   if the main_category has subcateries 
     count = 0
     for each subcategory
       for each task of the subcategory if the task.status is 0 (uncompleted)
         set count = count + 1
       endfor
     endfor
   else
     count = 0
     for each task of the category if the task.status is 0
       set count = count + 1
     endfor 
   endif
 endfor 

(我甚至不确定它是否有效,但我认为你有了这个想法。)

我认为这是复杂的,每次页面刷新时检查都很慢。

我能想到的另一个选择是向类别实体添加一个新字段(未完成任务的数量,或者我可能需要两者 - 已完成和未完成的数量)。但是每当我改变任务的状态时,我也应该改变数字。

说实话,我必须知道哪个更快,哪个更好(所以我问这个问题),但第一个看起来真的很复杂,很难理解。

如果您对如何实现此功能有任何更好的想法,或者如果您没有更好的想法,请告诉我 - 哪种方式更好,哪种更快等等。我真的不想学习编写高质量的代码。 :)

非常感谢您提前!

1 个答案:

答案 0 :(得分:0)

Here可能有所帮助。我们的想法是为一个类别创建一个视图,该视图将增加任务数量。因此,您可以创建一个视图,该视图将返回包含在结果中的通知计数所需的数据。请记住添加嵌套任务的数量(来自子类别)。查询视图可以比通常的表稍微慢一点,但我认为它仍然比许多迭代更快。您也会将一些执行时间移到SQL服务器上,这可能是一件好事。