2010-12-09 4 views
0

J'ai la question suivante.Contenir Comportement, conditions et tableau vide

Il fait partie du code:

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

Cette découverte() appelée dans la méthode de classe modèle de projet et je veux récupérer seulement des projets où User.id égal certains ID utilisateur est passé à ma méthode. Utilisateur HABTM Projet et projet Utilisateur HABTM.

Mais après l'exécution je la prochaine:


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 
       (
       ) 

     ) 

) 

Comme vous le voyez, il est le dernier tableau avec tableau vide [utilisateur], alors comment puis-je exclure ce tableau tableau vide (entier [2] Je veux dire) sans utiliser foreach/if blocs? Je sais que l'utilisation de bindModel fera tout aussi bien mais ce n'est pas pour ma question;) Alors, comment?

Répondre

2

Si vous placez vos conditions dans la clé 'contain', les résultats seront filtrés dans ce modèle particulier.

Récupération des bonnes données J'ai répondu à une question avant de très similaire à ce here. Vous auriez juste besoin de remplacer les modèles mentionnés ici avec vos propres modèles. Si vous avez du mal à comprendre la réponse, faites-le nous savoir.

Conseils pour la structure de votre modèle actuel Je remarque que votre modèle de ProjectsUser a un champ supplémentaire « de projects_users_role_id ». Lorsque votre modèle de jointure est complexe (plus que simplement id, model1_id, model2_id), vous devez le représenter par un modèle en lui-même. Il est généralement appelé relation hasMany Through. Vous pouvez aussi renommer "ProjectsUser" en quelque chose de plus agréable comme "ProjectMembership".

+0

Merci! Comme résultat j'ai utilisé unbindModel/bindModel pour créer des jointures et contenir pour le filtrage de tableau de résultats. – purple