代码之家  ›  专栏  ›  技术社区  ›  Daniel Magliola

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

  •  4
  • Daniel Magliola  · 技术社区  · 14 年前

    有没有一种方法可以在模型中指定我希望CakePHP忽略该字段,并且永远不读取它或对它做任何事情?

    谢谢!
    丹尼尔

    4 回复  |  直到 14 年前
        1
  •  8
  •   deceze    14 年前

    'fields' => array(...) find 限制要检索的数据。如果你不想每次写一个 找到 ,您可以在模型中添加类似的内容 beforeFind() 回调,它将自动填充 fields 除长文本字段外的所有字段的选项:

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

    没错,在这种情况下,最简单的方法可能是将字段从模式中取消设置。

    unset($this->Model->_schema['longtextfield']);
    

    $Model->_schemaInactiveFields 需要时把它移回去。你甚至可以为此做出行为。

        2
  •  4
  •   Young    14 年前

    参数 fields

    array(
    'conditions' => array('Model.field' => $thisValue), //array of conditions
    'fields' => array('Model.field1', 'Model.field2'), //list columns you want
    )
    

    您可以在 cookbook

    另一个想法

    function myfind($type,$params)
    {
         $params['fields'] = array('Model.field1','Model.field2',...);
         return $this->find($type,$params);
    }
    

    然后在控制器中使用它

    $this->Model->myfind($type,$params);
    
        3
  •  1
  •   Martijn    5 年前

    另外,尝试containable行为将去掉所有不需要的字段,并处理模型关联。 Containable

    class Post extends AppModel { <br>
        var $actsAs = array('Containable'); <br>
    }
    

    你的模特在哪里?

        4
  •  0
  •   Community VonC    7 年前

    请原谅:

    public function beforeFind(Event $event, Query $query){
    
    $protected = $this->newEntity()->hidden;
    
    $tableSchema = $event->subject()->schema();
    
    $fields = $tableSchema->columns();
    foreach($fields as $key => $name){
        if(in_array($name,$protected)){
            unset($fields[$key]);
        }
    }
    $query->select($fields);
    
    return $event;
    

    }

    在这个例子中,我从ModelClass中获取了隐藏字段以从结果中排除。

    Hidden fields are still listed from database in cakephp 3