для чего используется псевдоним модели CakePHP? - PullRequest
11 голосов
/ 25 ноября 2010

В модели пользователя:

var $hasMany = array(
        'Photo' => array(
            'className' => 'Photo',
            'foreignKey' => 'owner_id',
            ...
        ),
);

На фото модели:

var $belongsTo = array(
        'Owner' => array(
            'className' => 'User',
            'foreignKey' => 'owner_id',
            ...
            ),
);

Здесь у одного пользователя много фотографий. Так что мой вопрос в том, что здесь псевдоним называется «Владелец», что позволяет мне понять точное значение «Пользователь», но является ли это единственной причиной использования псевдонима? это влияет на «Фото» в модели пользователя? или как использовать 'Владелец' в / by cakephp?

Я не совсем понимаю значение псевдонима в модели. Ценю вашу помощь!

Ответы [ 2 ]

28 голосов
/ 26 ноября 2010

Два полезных сценария для псевдонимов:

1. Несколько внешних ключей для одной модели

Например, ваша таблица photos имеет два поля: created_user_id & modified_user_id

var $belongsTo = array(
    'CreatedUser' => array(
        'className' => 'User',
        'foreignKey' => 'created_user_id',
        ...
    ),
    'ModifiedUser' => array(
        'className' => 'User',
        'foreignKey' => 'modified_user_id',
        ...
    ),
);

2. Создание логических слов, специфичных для домена вашего приложения

Используя поле условий в массиве, вы можете указать различные типы моделей:

var $hasMany = array(
    'ApprovedUser' => array(
        'className' => 'User',
        'foreignKey' => 'group_id',
        'conditions' => array(
            'User.approved' => 1,
            'User.deleted'  => 0
        ),
        ...
    ),
    'UnapprovedUser' => array(
        'className' => 'User',
        'foreignKey' => 'group_id',
        'conditions' => array(
            'User.approved' => 0,
            'User.deleted'  => 0
        ),
        ...
    ),
    'DeletedUser' => array(
        'className' => 'User',
        'foreignKey' => 'group_id',
        'conditions' => array('User.deleted'  => 1),
        ...
    ),
);

В вышеприведенном примере модель группы имеет разных типов пользователей (утвержденных, неутвержденных и удаленных). Использование псевдонимов помогает сделать ваш код очень элегантным.

3 голосов
/ 25 ноября 2010

Это позволяет вам делать такие вещи, как $this->Owner->read(null,$userId); Вы можете иметь OwnersController и представления / владельцев.

Это ... псевдоним. В некотором смысле, User является псевдонимом для пользователей таблицы db.

Лучший пример: у меня есть CMS, где я использую таблицы статей для Article, BlogItem и News. Эти три имени являются псевдонимами для одной и той же таблицы, которые позволяют мне устанавливать разные модели, отношения и поведение. Поэтому у меня есть BlogItemsController и NewsController, а также ArticlesController.

...