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


One get method for each table field (model)

我有两个相互关联的模型。在一个特定的方法中,我需要在另一个方法上选择一个字段,我通常会创建一个只拉一个字段的方法,如果该字段将来发生变化,我将只需要更改函数的返回。以下是示例

我目前使用以下内容:(这只是一个例子,显然还有更多的字段要获取)

用户模型

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);
}

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

为什么要

获取单个字段?特别是如果您需要多个?这没有多大意义。获取整个记录(所有字段,或选择所需的 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
    )
));

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

$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,您可以将最后一行一分为二)。

我认为您不必为此在模型中复制和粘贴大量方法。

相关文章: