Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每个表字段(模型)一个get方法_Php_Mysql_Cakephp - Fatal编程技术网

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

Php 每个表字段(模型)一个get方法,php,mysql,cakephp,Php,Mysql,Cakephp,我有两个相互有关系的模型。在一个特定的方法中,我需要在另一个字段上选择一个字段,我通常创建一个方法来只提取一个字段,如果该字段在将来发生更改,我将只需要更改函数的返回。。这里有一些例子 我目前使用以下内容:(这只是一个示例,显然还有更多字段需要获取) 用户模型 function getUsername($user_id){ $this->id = $user_id; return $this->field('my_username_field'); } funct

我有两个相互有关系的模型。在一个特定的方法中,我需要在另一个字段上选择一个字段,我通常创建一个方法来只提取一个字段,如果该字段在将来发生更改,我将只需要更改函数的返回。。这里有一些例子

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

用户模型

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);
}
服务器型号

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

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

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

$this->Server->id = $server_id;
$username = $this->Server->getUsernameByServerId($this->Server->id);
$this->Server->id = $server_id;
$username = $this->Server->User->field('username');
不过,我认为你能做的就是这样称呼:

$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为什么要获取单个字段?特别是如果需要多个字段?这没有多大意义。更有效的方法是获取整个记录(所有字段,或选择需要的3-4个字段),然后处理数据,而不是对数据库进行多个查询。这既低效又重复,也不是很枯燥

CakePHP已经为此提供了一个方法

但就像我说的,你为什么不这么做

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

看看。顺便说一句,我不是CakePHP用户,可能有特定于框架的方法。有,但是如果我更改字段名怎么办?我将不得不更改对它的每个调用,为每个字段设置一个方法并不容易?因此,任何一种方法都是正确的?最好是复制和粘贴每个字段或为每个字段创建一个函数?我将只使用fat类s(型号)但是维护更容易说真的,哪个天才投了一个评论,鼓励复制和粘贴代码的糟糕做法?糟糕的是,我不能投反对票。好吧,但是更改字段名呢?我应该在每次调用它时都更改它,对吗?但是如果这样做是正确的,我会这样做。是的,只是从array.Cake的另一个索引已经在模型上有了查找数据库的方法,因此您应该始终能够使用
read()
find()
在控制器中获得所需的内容,而在模型中创建不同的方法就太过分了。