принадлежит к отношениям и фильтрации в cakePHP - PullRequest
1 голос
/ 06 июля 2011

Я новичок в cakePHP, и я занялся созданием очень небольшого проекта «Отчеты о состоянии», который позволил бы пользователю сообщать о своем текущем статусе по проекту, которому он был назначен.

В настоящее время я использую компоненты acl, auth и session, чтобы позволить многопользовательским пользователям управлять друг другом с помощью администратора, создавая пользователей, проекты и назначая их друг другу.Я также исправил это так, что, когда пользователь входит в систему и идет, чтобы добавить "статус", что их сеанс входа в систему автоматически заботится о "user_id" для статуса:

$this->data['Status']['user_id'] = $this->Auth->user('id');

Что мне нужно помочьсейчас нужно отфильтровать параметры проекта, которые пользователь может выбрать, чтобы добавить «статус».

В настоящее время у меня есть настройка с таблицей, которая содержит отношения между пользователями и проектами с именем * projects_users * с помощью *id, project_id, user_id * в качестве полей.Но после запуска этой настройки, когда пользователь добавляет «статус», в раскрывающемся меню отображаются все проекты, а не только те, которым они «назначены».

Я бы хотел отфильтроватьОпции пользователя для проектов, которым они назначены. Есть ли еще какие-то отношения, которые я должен установить, или это довольно простая маленькая функция для написания?Любая помощь будет принята с благодарностью, и если я опущу информацию, я был бы рад опубликовать что-нибудь еще.

Вот Модель состояния setup:

class Status extends AppModel {
var $name = 'Status';
//The Associations below have been created with all possible keys, those that are not needed can be removed

var $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Project' => array(
        'className' => 'Project',
        'foreignKey' => 'project_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);
}

Моя Модель пользователя выглядит так:

var $belongsTo = array(
    'Group' => array(
        'className' => 'Group',
        'foreignKey' => 'group_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

var $hasMany = array(
    'Status' => array(
        'className' => 'Status',
        'foreignKey' => 'user_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);


var $hasAndBelongsToMany = array(
    'Project' => array(
        'className' => 'Project',
        'joinTable' => 'projects_users',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'project_id',
        'unique' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

1 Ответ

1 голос
/ 06 июля 2011

В базе данных у вас должен быть столбец с именем project_id в таблице user , связанный с таблицей project id таблицы. колонка.

Затем в вашей модели User вы должны создать отношение hasMany с моделью Project.

class User extends AppModel {
    var $name = 'User';
    var $hasMany = 'Project';
}

Теперь, когда вы выбираете конкретного пользователя, вы получите все проекты, с которыми он связан.

...