для чего используется псевдоним модели CakePHP?

В пользовательской модели:

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

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

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

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

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


person user518261    schedule 25.11.2010    source источник


Ответы (2)


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

<сильный>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),
        ...
    ),
);

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

person RabidFire    schedule 25.11.2010
comment
Спасибо! Ваш второй пример - отличная идея! - person 472084; 05.03.2013

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

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

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

person Leo    schedule 25.11.2010
comment
Спасибо, это действительно полезно! Кстати, могу ли я иметь представления/элементы/владельцев? должно ли это быть то же самое с представлениями/владельцами (я имею в виду, что в браузере не будет указано «отсутствующие представления владельцев»)? - person user518261; 26.11.2010