Новое в использовании CakePHP / Model - PullRequest
0 голосов
/ 30 июля 2011

У меня есть таблица / модель пользователей, и определенное подмножество этих пользователей имеет запись в таблице «ролей».

Каков стандартный способ создания модели, которая имеет доступ ко всем пользователям, у которых есть одна или несколько записей / строк в таблице ролей?

Спасибо!

1 Ответ

3 голосов
/ 30 июля 2011

Добро пожаловать в Cake!

Одним из самых крутых и мощных аспектов Cake является их способный ORM .Как только вы выясните ассоциации Cake и то, как они работают с базами данных, трудно вернуться к чему-то другому.Но есть пара вещей, которые мы должны убедиться, что мы делаем с нашей реальной физической схемой базы данных, прежде чем мы сможем это сделать.

Итак, давайте поработаем с некоторыми «образцами» данных.

users
 -------------------------------------------------------
|  id (PK)  |  role_id (FK)  |  username  |  password   |
 -------------------------------------------------------
|     1     |         1      |  cspray     |  ad64675   |
 -------------------------------------------------------

... и т. д. и т. д.

roles
 --------------------------------------------
|  id (PK)  |              name              |
 --------------------------------------------
|  1        |  Benevolent Dictator for Life  |
 --------------------------------------------

... и т. д. и т. п.

Обратите внимание на названия таблиц, users и rolesи имена полей, в частности id и role_id.Это важно.id обычно является полем с автоинкрементом , int в вашей базе данных.Есть и другие способы сохранить ваш ключ id, но давайте не будем слишком много накапливать сразу.

Теперь все это, и мы еще не ответили на ваш вопрос! Не волнуйтесьмы собираемся добраться до этого.Но сначала дважды проверьте схему базы данных и убедитесь, что имена и столбцы таблиц названы в соответствии с Соглашением Cake .Не волнуйся, я подожду ...

...

Хорошо!Теперь откройте ваш любимый текстовый редактор и перейдите к install_dir/app/models/ (где install_dir - это имя папки, в которой установлен фреймворк).После создания нового файла назовите его user.php.Внутри этого файла мы будем использовать некоторый код, который выглядит следующим образом ...

class User extends AppModel {

    public $belongsTo = array('Role');

}

И, ну, у вас это есть!Теперь вы можете свободно запрашивать таблицу roles из своего класса User, вызывая методы через "цепочку ассоциаций" Cake, $this->User->Role->find().Вы можете и, вероятно, должны создать модель Role точно так же, как вы создали User, без $belongsTo.Внутри него вы можете определить свои собственные методы взаимодействия с таблицей roles и предоставить необходимую информацию User.

Хотя я не хочу вдаваться в подробности о том, как работает ORM Cake, в основномпотому что, если вы прочитаете Cake Cookbook и Cake API , вы найдете множество знаний, готовых к употреблению.

Наслаждайтесь своими приключениями в Cake!

Итак, все ваши ассоциации моделей настроены, и вы готовы к работе.Но куда ты идешь?Итак, вы захотите проверить модели поведения Cake , в частности, одно из самых важных базовых поведений, Containable .Это позволит вам делать именно то, что вы хотите.

Давайте просто посмотрим на некоторый код, я собираюсь предположить, что вы уже знакомы с Model :: find () метод.Если нет, я пойду проверю это очень быстро, чтобы вы не запутались.Хотя это довольно просто.

class User extends AppModel {

    // provides $this->User->Role
    public $belongsTo = array('Role');

    // gives access to various behaviors
    public $actsAs = array('Containable');

    // custom function
    public function get_users_with_roles() {

        return $this->User->find(
            'contain' => array(
                'Role' => array(     // tells ORM to query `roles` table
                    'Hour',         // <-- tells ORM to query `hours` table
                    'conditions' => array(
                       'Role.id' => '<> NULL'
                    )
                )
            ),
            'fields' => array(
                'User.username'
            )
        );

    }

}

Это должно вернуть все имена пользователей пользователя (и, возможно, их id и role_id), которые имеют запись в таблице roles.Обратите внимание на добавление нового свойства и способ размещения «запроса» в ORM Cake.Одна вещь, которую я мог бы предложить освоиться, - это многомерные ассоциативные массивы, Cake использует их много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...