使用cakePHP实现相同的递归效果

时间:2013-02-13 14:32:34

标签: php mysql cakephp-2.2

背景

我正在将所有旧脚本移到cakePHP框架上。原因是尝试查找和修复错误所花费的时间更少,而且必须更好地布局和构造。哦,速度。但随之而来的是一个巨大的学习曲线。这是我的第一个带有cakePHP的应用程序,所以我对框架的功能和能力非常新(并且毫无头绪)。

我的问题

在较旧的脚本中,我递归地查看字母表以从以该特定字母开头的数据库中检索名称。这些结果根据他们的起始字母进行了分类。

为实现这一目标,我的旧脚本看起来像这样:

$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for($l = 0; $l < strlen($letters); $l++) {
    $names = mysql_query("SELECT name,ext,new FROM admin_extensions WHERE office = '" . $_GET['branch'] . "' AND name LIKE '" . $letters[$l] . "%' ORDER BY name ASC")or die(mysql_error());
    // Do something fancy...
}

我不知道如何将其翻译成cakePHP。该脚本将内容输出到excel表。以下是excel表格的小视图:

Extract of Excel File

问题

我的问题很简单:如何使用cakePHP达到同样的效果?由于这会生成excel表,我需要能够a)在视图中执行此操作,或者b)将数据传输到视图文件。

这可能吗?

1 个答案:

答案 0 :(得分:0)

所以经过一些更多的出汗,我就把它解决了。

我是这样做的。

在我的控制器中:

$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for($l = 0; $l < strlen($letters); $l++) {
    $adminExtensions[$letters[$l]] = $this->AdminExtension->find('all',
        array(
            'conditions' => array(
                'AND' => array(
                    'AdminExtension.location_id'=>'3',
                    'HrEmployee.name LIKE '=>$letters[$l].'%'
                )
            )
        )
    );
}
$this->set(compact('adminExtensions'));

在我看来,我这样做了:

$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$k = 1;
for($l = 0; $l < strlen($letters); $l++) {
    $this->PhpExcel->write('B'.($l+$k+1),$letters[$l]);
    foreach ($adminExtensions[$letters[$l]] as $adminExtension) {
        $k++;
        $this->PhpExcel->write('A'.($l+$k+1),$adminExtension['HrEmployee']['name'] . ' ' . $adminExtension['HrEmployee']['surname']);
        $this->PhpExcel->write('B'.($l+$k+1),$adminExtension['AdminExtension']['ext']);
    }
}

完美无缺! :)