仅在CAKEPHP中的find上获取一些字段

Mee*_*att 4 cakephp cakephp-model

我的问题是当我从用户表中获取用户数据时,用户表的所有字段都从用户表中获取..但我不想包含密码和电子邮件地址,所以有没有办法只获取除密码和电子邮件地址?

问候.

AD7*_*six 8

正如juhana所提到的,您不需要使用查找调用返回的所有字段.目前尚不清楚您要解决的实际问题是什么,在未来的问题中澄清这些细节符合您的利益.

直接查询

对于直接在您的用户模型上查询,您可以使用以下逻辑:

public function beforeFind($queryData) {
    if (empty($queryData['fields'])) {
        $schema = $this->schema();
        unset($schema['password']);
        unset($schema['email']);

        foreach (array_keys($schema) as $field) {
            $queryData['fields'][] = $this->alias . '.' . $field;
        }
        return $queryData;
    }

    return parent::beforeFind($queryData);

}
Run Code Online (Sandbox Code Playgroud)

然而

对于查询其他模型的查询,这不会做任何事情

$results = $PostModel->find('all', array(
    'contain' => array('User')
));
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,将返回所有用户字段.对于这样的用途,最好明确定义字段列表,而不是依赖任何自动魔术:

$results = $PostModel->find('all', array(
    'contain' => array('User')
    'fields' => array('Post.*', 'User.name')
));
Run Code Online (Sandbox Code Playgroud)