有多種方法可以做到這一點。一種方法是在模型類中使用afterFind函數。 參見:http://book.cakephp.org/view/681/afterFind。
但是,這個函數不能很好地處理嵌套數據,相反,它並沒有處理它! 因此,我使用一個afterFind功能在通過所述結果集行走app_model
function afterFind($results, $primary=false){
$name = isset($this->alias) ? $this->alias : $this->name;
// see if the model wants to attach attributes
if (method_exists($this, '_attachAttributes')){
// check if array is not multidimensional by checking the key 'id'
if (isset($results['id'])) {
$results = $this->_attachAttributes($results);
} else {
// we want each row to have an array of required attributes
for ($i = 0; $i < sizeof($results); $i++) {
// check if this is a model, or if it is an array of models
if (isset($results[$i][$name])){
// this is the model we want, see if it's a single or array
if (isset($results[$i][$name][0])){
// run on every model
for ($j = 0; $j < sizeof($results[$i][$name]); $j++) {
$results[$i][$name][$j] = $this->_attachAttributes($results[$i][$name][$j]);
}
} else {
$results[$i][$name] = $this->_attachAttributes($results[$i][$name]);
}
} else {
if (isset($results[$i]['id'])) {
$results[$i] = $this->_attachAttributes($results[$i]);
}
}
}
}
}
return $results;
}
然後我添加_attachAttributes函數模型中的類,例如用於在你的Person.php中
function _attachAttributes($data) {
if (isset($data['first_name']) && isset($data['last_name'])) {
$data['full_name'] = sprintf("%s %s %s", $data['first_name'], $data['last_name']);
}
return $data;
}
該方法可以處理嵌套modelData,例如,人有許多帖子,那麼這個方法也可以在Post模型中附加屬性。
該方法也記住,由於使用別名而不僅僅是名稱(這是className),所以具有除className之外的其他名稱的鏈接模型是固定的。
這涵蓋了需求。我繼續這個元素。 – 2009-11-09 17:33:01