CakePHP:从DB读取模型时,我可以忽略一个字段吗?

Dan*_*ola 4 cakephp

在我的一个模型中,我有一个"LONGTEXT"字段,其中包含大量的东西,我从不在乎这些东西,它减慢了速度,因为我在数据库和Web之间移动了更多的数据应用程序.

有没有办法在模型中指定我希望CakePHP简单地忽略该字段,从不读它或用它做任何事情?

我真的想避免创建一个单独的表和一个单独的模型的麻烦,仅适用于此字段.

谢谢!
丹尼尔

dec*_*eze 8

正如@SpawnCxy所说,您需要使用a中的'fields' => array(...)选项find来限制要检索的数据.如果您不想在每次编写时都这样做find,可以在模型beforeFind()回调中添加类似这样的内容,这将自动fields使用除longtext字段之外的所有字段填充选项:

function beforeFind($query) {
    if (!isset($query['fields'])) {
        foreach ($this->_schema as $field => $foo) {
            if ($field == 'longtextfield') {
                continue;
            }
            $query['fields'][] = $this->alias . '.' . $field;
        }
    }
    return $query;
}
Run Code Online (Sandbox Code Playgroud)

关于评论:

这是真的......在这种情况下最简单的方法可能是从架构中取消字段.

unset($this->Model->_schema['longtextfield']);
Run Code Online (Sandbox Code Playgroud)

我没有测试它,但这应该阻止该字段包含在查询中.如果要为每个查询进行此可切换,可以将其移动到另一个变量,$Model->_schemaInactiveFields并在需要时将其移回.你甚至可以为此做一个行为.