Pergunta

Estou tentando configurar o CakePHP para atuar como uma API REST para um aplicativo que estou escrevendo.

Eu tenho 3 mesas:

dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

Eu gostaria que, quando alguém visitar /users/1.xml, os dados que recebem devoluções são apenas a lista de 'pratos' que um usuário tem na mesa de 'Dishes_users', eu não quero nada de usuários ou prisioneiros_usas para ser Lá, apenas o ID, o nome e a descrição da mesa de pratos.

No final, a estrutura XML deve ser:

<dishes>
 <dish id="1" name="whatever" description ="This is a description"/>
 <dish id="2" name="whatever" description="This is another description"/>
</dishes>

Atualmente, este é o relacionamento que estou usando no modelo de usuários:

var $hasAndBelongsToMany = array(
    "Dish" => array(
        'className' => 'Dish',
        'joinTable' => 'dishes_users',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'dish_id',
        'unique'                 => true,
        'conditions'             => '',
        'fields'                 => '',
        'order'                  => '',
        'limit'                  => '',
        'offset'                 => '',
        'finderQuery'            => '',
        'deleteQuery'            => '',
        'insertQuery'            => ''
));

No controlador que tenho:

function view($id) {
    $dishes = $this->User->findAllById($id);
    $this->set(compact('beers'));
}

Isso me dá o que eu quero, mas também me dá muitas coisas que não quero. Tudo o que preciso é a lista de pratos.

Obrigado por qualquer ajuda, isso está me deixando louco.

Foi útil?

Solução

Tente limitar um pouco o escopo. Você não menciona o controlador em que está fazendo esse trabalho, mas parece não é a DishesController. Se, por exemplo, é o UsersController:

$dishes = $this->User->Dish->find( 
  'all', 
  array(
    'fields'     => array( 'Dishes.*' ),
    'conditions' => array( 'DishesUsers.user_id' => $this->id ) // where $this is a user
  )
);

Isso deve, do UsersController, puxe apenas dados de prato relacionados a um determinado usuário. Eu meio que sacudi isso da memória, mas isso pode levá -lo a algum lugar da vizinhança do que você precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top