2010-12-09 38 views
0

我有下一个问题。包含行为,条件和空阵列

有部分代码:

 $result = $this->find('all', array(
      'contain' => array(
       'User' => array(
        'fields' => 'id', 
        'conditions' => array(
         'id' => $user_id 
        ) 
       ) 
      ), 
      'fields' => 'url' 
     )); 

这一发现()调用项目模型类的方法,我想只获得项目中User.id等于传递给我的方法,一些用户ID。 用户HABTM项目和项目HABTM用户。

但执行后,我有下:


app/views/projects/index.ctp (line 1) 

Array 
(
    [0] => Array 
     (
      [Project] => Array 
       (
        [url] => http://purpled.biz 
        [id] => 1 
       ) 

      [User] => Array 
       (
        [0] => Array 
         (
          [id] => 4 
          [ProjectsUser] => Array 
           (
            [user_id] => 4 
            [project_id] => 1 
            [projects_users_role_id] => 0 
           ) 

         ) 

       ) 

     ) 

    [1] => Array 
     (
      [Project] => Array 
       (
        [url] => http://google.com 
        [id] => 2 
       ) 

      [User] => Array 
       (
        [0] => Array 
         (
          [id] => 4 
          [ProjectsUser] => Array 
           (
            [user_id] => 4 
            [project_id] => 2 
            [projects_users_role_id] => 0 
           ) 

         ) 

       ) 

     ) 

    [2] => Array 
     (
      [Project] => Array 
       (
        [url] => http://test.com 
        [id] => 3 
       ) 

      [User] => Array 
       (
       ) 

     ) 

) 

正如你看到有空[用户]数组最后一个数组,所以我怎么能排除这种空数组(全[2]数组我的意思)没有使用foreach/if块?我知道使用bindModel会尽一切努力,但这不适合我的问题;)那么,如何?

回答

2

将您的条件放在“包含”键中将过滤该特定模型中的结果。

检索正确的数据 我已经回答了一个问题,之前非常类似于此here。你只需要用你自己的模型替换那里提到的模型。如果您无法理解那里的答案,请告诉我们。

您当前模型结构的提示 我注意到您的ProjectsUser模型有一个额外的字段“projects_users_role_id”。当你的连接模型很复杂(不仅仅是id,model1_id,model2_id)时,你需要用模型本身来表示它。它通常被称为hasMany Through关系。

User hasMany ProjectsUser 
Project hasMany ProjectsUser 
ProjectsUserRole hasMany ProjectsUser 

ProjectsUser belongsTo User 
ProjectsUser belongsTo Project 
ProjectsUser belongsTo ProjectsUserRole 

您还可以将“ProjectsUser”重命名为“ProjectMembership”等更好的东西。

+0

谢谢!因此,我使用unbindModel/bindModel来创建连接并包含结果数组过滤。 – purple 2010-12-12 19:55:38