PERGUNTA DE RELACIONAMENTO DO BAPOPHP
-
24-09-2019 - |
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.
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.