每个表字段(模型)的一个get方法

时间:2014-03-30 15:24:05

标签: php mysql cakephp

我有两个彼此有关系的模型。在一个特定的方法中我需要在另一个上选择一个字段,我通常创建一个方法来拉一个字段,如果将来的字段发生变化,我将只需要更改函数的返回..这里是示例

我目前使用以下内容:(这只是一个示例,显然还有更多字段可供使用)

用户模型

function getUsername($user_id){
    $this->id = $user_id;
    return $this->field('my_username_field');
} 

服务器型号

function getUserIdByServerId($server_id){
    $this->id = $server_id;
    return $this->field('my_user_id_field');
}
function getUsernameByServerId($server_id){
    $user_id = $this->getUserIdByServerId($server_id);
    return $this->User->getUsername($user_id);
}

这是要写的很多代码,因为如果我想获得更多字段,我将不得不为每个字段编写一种方法..如果我不这样做,那么当字段名称改变时我会'我必须在所有电话上重写他的名字..更好的方法是什么?

2 个答案:

答案 0 :(得分:1)

为什么要获取单个字段?特别是如果你需要不止一个?这没有多大意义。获取整个记录(所有字段,或选择所需的3-4)更有效,然后处理数据而不是对数据库进行多次查询。这是低效和重复的,不是很干。

CakePHP已经有一个方法,Model::field()

$this->Server->User->field('username', array(
    'conditions' => array(
        'User.server_id' => $serverId
    )
));

但就像我说的那样,你为什么不这样做呢?

$this->Server->find('first', array(
    'contain' => array(
        'User'
    ),
    'conditions' => array(
        'User.server_id' => $serverId
    )
));

答案 1 :(得分:0)

您不需要在模型中为此创建新方法。我想你现在在服务器控制器中做的事情是这样的:

$this->Server->id = $server_id;
$username = $this->Server->getUsernameByServerId($this->Server->id);

我认为你可以做的只是打电话:

$this->Server->id = $server_id;
$username = $this->Server->User->field('username');

或者如果您(我认为)PHP 5.4或更高版本只使用:

$this->Server->id = $server_id;
$username = $this->Server->read()['User']['username'];

(使用PHP <5.4,您可以将最后一行拆分为两个)。

我认为你不应该在模型中复制和粘贴大量方法。