CakePHP模型别名用于什么?

时间:2010-11-25 08:49:04

标签: cakephp model alias

在用户模型中:

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

在照片模型中:

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

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

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

2 个答案:

答案 0 :(得分:28)

别名的两个有用场景:

<强> 1。同一模型的多个外键

例如,您的photos表格有两个字段:created_user_id&amp; modified_user_id

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

<强> 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),
        ...
    ),
);

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

答案 1 :(得分:3)

它允许您执行$this->Owner->read(null,$userId);之类的操作。您可以拥有OwnersController和视图/所有者。

这是别名。从某种意义上说,User是db表用户的别名。

一个更好的例子:我有一个CMS,我使用Article,BlogItem和News的表文章。这三个名称是同一个表的别名,允许我设置不同的模型,关系和行为。所以我有一个BlogItemsController和一个NewsController以及一个ArticlesController。