2012-09-28 21 views
0

我有一个数组,我传递给我的视图,它与多个表连接。我们称这个数组为Submissions。所有submissions包含SubmissionVote S和一个典型的数据submission对象看起来是这样的:在循环多个连接的数组时循环创建更易管理的数组的方法?

[1] => Array 
     (
      [Submission] => Array 
       (
        [user_id] => 17 
        [title] => Yo mama so fat when she went to the movies she sat next to everyone 
        [source] => http://www.ahajokes.com/ym01.html 
        [slug] => yo-mama-so-fat-when-she-went-to-the-movies-she-sat-next 
        [category] => funny 
        [created] => 2012-09-26 21:00:35 
        [id] => 104 
       ) 

      [User] => Array 
       (
        [id] => 17 
        [username] => bob_cobb 
       ) 

      [SubmissionsVote] => Array 
       (
        [0] => Array 
         (
          [id] => 323 
          [user_id] => 2 
          [submission_id] => 104 
          [vote_type] => up 
          [when] => 0000-00-00 00:00:00 
          [voted_ip] => 842844107 
         ) 

        [1] => Array 
         (
          [id] => 322 
          [user_id] => 17 
          [submission_id] => 104 
          [vote_type] => up 
          [when] => 0000-00-00 00:00:00 
          [voted_ip] => 1163843117 
         ) 

       ) 

      [SubmissionThumbnails] => Array 
       (
        [0] => Array 
         (
          [id] => 6 
          [submission_id] => 104 
          [original] => http://www.ahajokes.com/g/smlogo.gif 
          [extension] => jpg 
          [slug] => http://www.ahajokes.com/g/smlogo.gif 
         ) 

       ) 

     ) 

现在我只是做了foreach通过这个在我看来,抓住:$submission['Submission']['id'],从中$submission['Submission']['category']和其他有用的东西。这很好,但我想以某种方式能够创建一个新的对象(或者同样直观的东西),其数量为vote_type,下降的数量为vote_type,这样我就可以像$submission['Submission']['upVotes']/$submission['Submission']['downVotes']

我做在CakePHP中的加入,这里是我的查询:

 $this->find('all', array(
       'fields' => array(
        'Submission.user_id', 
        'Submission.title', 
        'Submission.source', 
        'Submission.slug', 
        'Submission.category', 
        'Submission.created', 
        'User.id', 
        'User.username'), 
       'order' => 'Submission.created DESC')); 

我想这样做的唯一原因是因为经历,并有我的看法中添加了所有upvotes和downvotes会相当痛苦,更不用说漂亮马虎。

我该如何改进?

回答

0

您可以尝试使用虚拟域http://book.cakephp.org/2.0/en/models/virtual-fields.html

在你Submission模型中,你会类似于:

public $virtualFields = array(
    'up_count' => 'SELECT COUNT(*) FROM submission_votes AS up_count WHERE submission_id = Submission.id AND vote_type = "up"', 
    'down_count' => 'SELECT COUNT(*) FROM submission_votes AS down_count WHERE submission_id = Submission.id AND vote_type="down"', 
); 

在上面的例子中,submission_votes是您SubmissionVote模型数据库表名。请务必注意警告:http://book.cakephp.org/2.0/en/models/virtual-fields.html#limitations-of-virtualfields

如果您只是想操作数据数组,另一个选项可能是使用Hash类中的某些东西,如Hash::reduce

http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::reduce