我将MySQL
其用作所有模型的数据库连接适配器。我有一个带有索引函数的下载模型和控制器,它根据请求传递的类型呈现HTML
表或文件。CSV
我还有一个CSV
媒体类型来处理数据数组,它按预期工作(输出数组键作为标题,然后输出每行数据的数组值)。
我希望执行相同的查找查询,但如果要呈现文件,ID
则从记录集中删除字段。CSV
您会注意到即使下载 ID 不在 fields 数组中,它也会被获取,因此仅根据请求类型更改 fields 数组是行不通的。
我在下载控制器的索引操作中尝试了以下操作:
<?php
namespace app\controllers;
use app\models\Downloads;
class DownloadsController extends \lithium\action\Controller {
public function index() {
// Dynamic conditions
$conditions = array(...);
$downloads = Downloads::find('all', array(
'fields' => array('user_id', 'Surveys.name'),
'conditions' => $conditions,
'with' => 'Surveys',
'order' => array('created' => 'desc')
));
if ($this->request->params['type'] == 'csv') {
$downloads->each(function ($download) {
// THIS DOES NOT WORK
unset($download->id, $download->user_id);
// I HAVE TRIED THIS HERE AND THE ID FIELDS STILL EXIST
// var_dump($download->data());
// exit;
return $download;
});
return $this->render(array('csv' => $downloads->to('array')));
}
return compact('downloads');
}
}
?>
我认为实体对象上有一个魔术方法,当您在实体字段上__unset()
调用标准函数时会调用该方法。PHP
unset()
如果有一个$recordSet->removeField('field')
功能会很棒,但我找不到。
任何帮助将不胜感激。