CakePHP Отношения Вопрос - PullRequest
       15

CakePHP Отношения Вопрос

0 голосов
/ 01 февраля 2010

Я пытаюсь настроить CakePHP для использования в качестве REST API для приложения, которое я пишу.

У меня есть 3 таблицы:

dishes {
 id,
 name,
 description
}

users {
 id,
 name,
 email
}

dishes_users {
 id,
 user_id,
 dish_id
}

Мне бы хотелось, чтобы прикто-то посещает /users/1.xml, возвращаемые данные - это просто список «блюд», которые пользователь имеет в таблице «блюдо-пользователи», я не хочу, чтобы там было что-то от пользователей или dish_users, только идентификатор,имя и описание таблицы блюд.

в конце структура xml должна быть:

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

В настоящее время это отношение, которое я использую в модели пользователей:

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'            => ''
));

В контроллере у меня есть:

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

Это дает мне то, что я хочу, но также дает мне много вещей, которые я не хочу.Все, что мне нужно, это список блюд.

Спасибо за любую помощь, это сводит меня с ума.

1 Ответ

1 голос
/ 01 февраля 2010

Попробуйте немного ограничить сферу. Вы не упоминаете контроллер, в котором выполняете эту работу, но похоже, что не DishesController. Если, например, это UsersController:

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

Это должно из UsersController извлекать только те данные блюда, которые относятся к данному пользователю. Я вроде как стряхнул это с памяти, но это может привести вас к тому, что вам нужно.

...