2013-10-10 4 views
1

У меня есть следующие соотношения:CakePHP HABTM найти только связаны данные модели

class Platformuser extends AppModel { 
public $hasAndBelongsToMany = array(
    'Service' 
); 
}  

class Service extends AppModel { 
public $hasAndBelongsToMany = array(
    'Platformuser' 
); 
} 

я делаю действие на PlatformusersController, чтобы получить услуги, связанные с этим пользователем, с помощью следующего запроса:

$this->Platformuser->find('all', array(
'conditions' => array('Platformuser.id' => $userId), 
)); 

Он возвращает все о Platformuser/Service, и я ТОЛЬКО хочу получить данные об услугах:

array(
(int) => array(
    [Platformuser] => array(
     [id] => [1] 
     [name] => [Domingo] 
    ), 
    [Service] => array(
     (int) 0 => array(
       [id] => [1] 
       [name] => [dropbox], 
       [PlatformusersService] => array(
        [id] => [1], 
        [platformuser_id] => [1], 
        [service_id] => [1], 
        [modified] => [2013-10-10 00:00:00], 
        [created] => [2013-10-10 00:00:00]; 
      ) 
     ) 
    ) 
) 

Я хочу что-то вроде:

array(
    [Service] => array(
     (int) 0 => array(
       [id] => [1] 
       [name] => [dropbox] 
     ) 
    ) 

Любые идеи ?.

ответ

3

Вы должны использовать сдерживаемое поведение. Он прост в использовании, и вы сможете получать данные в соответствии с вашими потребностями.

$plateFormuser = $this->Platformuser->find('first', array(
    'conditions' => array('Platformuser.id' => $userId), 
    'contain' => array(
     'Service' => array(
      'fields' => array('id', 'name') 
     ) 
    ) 
    )); 

$services = Set::merge(
     Set::classicExtract($plateFormuser, 'Service.{n}.{id}'), 
     Set::classicExtract($plateFormuser, 'Semester.{n}.{name}') 
); 

Теперь вы можете JSON кодирования $ услуги, чтобы получить результат, как вы уже упоминали [{"id":"1", "name":"dropbox"}].

+0

Не работает вообще, получая: [ [ { "ID": "1", "PlatformusersService": { "ID": "1", " service_id": "1", "created": "2013-10-10 00:00:00", "modified": "2013-10-10 00:00:00", "platformuser_id": "1" }, "имя ":" dropbox " }]] –

+0

Как сообщить содержанию, чтобы не получать информацию таблицы HABTM ?. Кроме того, знаете ли вы, почему я получаю двойной массив (в начале) ?. Должно быть: [{"id": "1", "name": "dropbox"}] (данные json'd). –

+0

Я отвечу, если вы знаете, как игнорировать данные HABTM. –

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