Я использую MySQL
в качестве адаптера подключения к базе данных для всех моих моделей. У меня есть модель загрузки и контроллер с функцией индекса, которая отображает либо таблицу HTML
, либо файл CSV
в зависимости от типа, переданного из запроса. У меня также есть тип носителя CSV
для обработки массива данных, который работает, как и ожидалось (выводит ключи массива в виде заголовков, а затем значения массива для каждой строки данных).
Я хочу сделать тот же поисковый запрос, но затем удалить поля ID
из набора записей, если будет отображаться файл CSV
. Вы заметите, что идентификатор загрузки извлекается, даже если его нет в массиве полей, поэтому простое изменение массива полей на основе типа запроса не сработает.
Я пробовал следующее в действии index моего контроллера загрузки:
<?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')
, но не могу найти.
Любая помощь будет принята с благодарностью.