使用现有字段名称作为不同的名称

时间:2011-06-19 17:56:50

标签: cakephp model

我有现有的网站 并且我在不改变前端程序的情况下编写新的后端(在cakephp中)

感到不舒服 db表的字段名称为
ID
news_date
news_title
news_content

是否可以在cakephp模型文件中执行某些操作(重新标识字段名称) 所以我可以在控制器中使用模型作为
News.date
News.title
News.content

2 个答案:

答案 0 :(得分:2)

您需要做的是在新闻模型中设置一些非常基本的virtual fields。这样的事情应该适合你的需要。

public $virtualFields = array(
    'title' => 'news_title',
    'date' => 'news_date',
    'content' => 'news_content'
);

也可以通过查看可以帮助你的其他model attributes来帮助你,你需要将displayType设置为我想象的new_title。

答案 1 :(得分:1)

Dunhamzz说,virtualFields是一个很好的解决方案,直到你想要使用这些新的字段名称。

由于我假设你的前端需要使用数据库中的旧名称,我会在你的模型中使用afterFind-callback。
假设你有模型news.php:

# /app/model/news.php

function afterFind($results) {
    foreach ($results as $key => $val) {
        if (isset($val['News']['title'])) {
            $results[$key]['News']['news_title'] = $val['News']['title']);
            # unset($results[$key]['News']['title']); //use this if you don't want the "new" fields in your array
        }
        if (isset($val['News']['date'])) {
            $results[$key]['News']['news_date'] = $val['News']['date']);
            # unset($results[$key]['News']['date']); //use this if you don't want the "new" fields in your array
        }
        if (isset($val['News']['content'])) {
            $results[$key]['News']['news_content'] = $val['News']['content']);
            # unset($results[$key]['News']['content']); //use this if you don't want the "new" fields in your array
        }
    }
    return $results;
}

您需要将数据库字段重命名为新的所需值。然后,您可以在其他所有领域的条件下使用这些 唯一的区别是,你得到一个数组,其中所有的字段都被重命名为你的前端字段。

有关可用回调方法的详细信息,请查看此处:Callback Methods