CakePHP模型别名用于什么?

use*_*261 11 alias cakephp model

在用户模型中:

var $hasMany = array(
        'Photo' => array(
            'className' => 'Photo',
            'foreignKey' => 'owner_id',
            ...
        ),
);
Run Code Online (Sandbox Code Playgroud)

在照片模型中:

var $belongsTo = array(
        'Owner' => array(
            'className' => 'User',
            'foreignKey' => 'owner_id',
            ...
            ),
);
Run Code Online (Sandbox Code Playgroud)

这里有一个用户有很多照片.所以我的问题是,这里的别名是'Owner',这让我清楚地理解'User'的确切含义,但这是使用别名的唯一原因吗?它会影响用户模型中的"照片"吗?或者如何在cakephp中使用'所有者'?

我不太明白模型中别名的含义.感谢您的帮助!

Rab*_*ire 28

别名的两个有用场景:

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',
        ...
    ),
);
Run Code Online (Sandbox Code Playgroud)

2.创建特定于应用程序域的逻辑单词

使用数组中的conditions字段,您可以指定不同类型的模型:

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),
        ...
    ),
);
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,组模型具有不同类型的用户(已批准,未批准和已删除).使用别名有助于使您的代码非常优雅.


Leo*_*Leo 3

它允许你做一些事情,比如$this->Owner->read(null,$userId);你可以拥有一个 OwnersController 和视图/所有者。

这是……一个别名。从某种意义上说,User 是 db 表 users 的别名。

一个更好的例子:我有一个 CMS,我使用表格文章来表示文章、博客项目和新闻。这三个名称是同一个表的别名,允许我设置不同的模型、关系和行为。所以我有一个 BlogItemsController 和一个 NewsController 以及一个 ArticlesController。