2012-05-10 6 views
0

У меня есть следующий массив, и я хочу объединить всех пользователей одной и той же компании вместе. В настоящее время каждый пользователь появляется с идентификатором компании, а иногда у одного и того же пользователя есть 2 или более пользователей. Поэтому я хочу вернуть его и показать пользователям под компанией не компанию под пользователями. Как бы я идти об этом, чтокак сгруппировать этот массив

Array 
(
    [0] => Array 
     (
      [User] => Array 
       (
        [id] => 1 
        [company_id] => 20 
        [type] => 
       ) 


     ) 

    [1] => Array 
     (
      [User] => Array 
       (
        [id] => 6 
        [company_id] => 21 
        [type] => 
       ) 


     ) 

    [2] => Array 
     (
      [User] => Array 
       (
        [id] => 7 
        [company_id] => 22 
        [type] => 
       ) 


     ) 

    [3] => Array 
     (
      [User] => Array 
       (
        [id] => 14 
        [company_id] => 21 
        [type] => 
       ) 


     ) 

    [4] => Array 
     (
      [User] => Array 
       (
        [id] => 15 
        [company_id] => 22 
        [type] => 
       ) 



     ) 

    [5] => Array 
     (
      [User] => Array 
       (
        [id] => 16 
        [company_id] => 21 
        [type] => 
       ) 


       ) 

     ) 

) 

ответ

1

Из примера я полагаю, что ваши отношения следующим образом:

«Пользователь belongsTo Компания» и «Компания hasMany Пользователь»

@tigrang является правильным, если вы делаете находку компании, вы будете получить пользователь Сгруппированных компании:

$this->Company->find('all', array('conditions' => array('id' => $companyId))); 

Если ваша компания Модель имеет много других отношений, и вам нужны только пользователи, которые можно использовать в ContainableBehaviour. Во-первых, добавить его в модели компании:

public $actsAs = array('Containable); 

Тогда в вызове находкой():

$this->Company->find('all', array('conditions' => array('id' => $companyId), 'contain' => array('User'))); 

«содержит» ключ принимает массив имен модели или строку для одной модели. Он будет корректировать привязки модели «на лету», оставив вас только с данными моделей компании и пользователя (если используется в примере выше).

И маленькая вещь, которую я пропустил. Вы можете также использовать клавишу «группы» в находке над моделью пользователя:

$this->User->find('all', array('group' => 'company_id')); 

Попробуйте оба подхода и посмотреть, что вы придумали.

-1

ли находку на модели компании, а не с помощью либо рекурсивной или ContainableBehavior.

+0

Хотя ваш ответ правильный, он, похоже, не полностью отвечает на вопрос, поскольку нет точного примера. –

+1

@Borislav Sabev Я думаю, что он отвечает на вопрос: «Как бы я это сделал». Где он попросил пример? Все, что сказал Autolycus, это то, как вы это сделаете. – tigrang

Смежные вопросы