Как использовать CakePHP для добавления данных в базу данных при отправке из формы? - PullRequest
0 голосов
/ 17 марта 2012

Я разрабатывал это приложение для использования в моей биологической лаборатории, где мне требуется следующее:

  1. Пользователь добавляет данные в текстовое поле.
  2. Когда пользователь хочетчтобы обновить текстовое поле, он / она не может обновить существующий текст и может только добавлять новый текст в поле.
  3. Следовательно, форма должна содержать пустое текстовое поле, в которое пользователь может ввести текст для добавления.существующая запись.
  4. В идеале, я также хотел бы добавить метку времени для каждой записи.

Как вы можете видеть, это своего рода лабораторная тетрадь,где важна целостность ранее введенных данных.

У меня проблемы со вторым пунктом, поскольку я не знаю, как создать пустое текстовое поле, которое сохраняет данные в соответствующее поле вмодель.

Вот код, который у меня сейчас есть для «представления»:

(я пытался скрыть существующие данные - «results_summary» - в «скрытом» элементе.)

<!-- File: /app/View/Experiments/update.ctp -->

<h1>Update Experiment</h1>

<h2>Objective:</h2>
<p><?php echo $experiment['Experiment']['objective']?></p>

<p>Notebook <?php echo $experiment['Experiment']['notebook_number'] ?>, Page <?php echo $experiment['Experiment']['notebook_page'] ?> </p>

<p>Date Started: <?php echo $experiment['Experiment']['date_started']?></p>
<p>Date Ended: <?php echo $experiment['Experiment']['date_ended']?></p>

<p>Project: <?php echo $experiment['Project']['title']?>

<p>Status: <?php echo $experiment['ExperimentStatus']['title']?>

<p>Results Summary:</p>

<p><?php    echo $this->Form->create('Experiment', array('action' => 'update'));
            echo $this->Form->hidden('results_summary');
            echo $this->Form->text('results_summary');
            echo $this->Form->end('Update');
            //$experiment['Experiment']['results_summary']?></p>

У кого-нибудь естьподсказки о том, как я мог бы решить эту проблему?Я сейчас совершенно заблудился, так как у меня не было опыта кодирования этого раньше.

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

Мне бы пришлось согласиться с @ bfavaretto

Не видя структуру вашей базы данных, трудно быть уверенным.

Я подозреваю, что вы делаете

  • У проекта есть много экспериментов
  • У эксперимента есть только одно состояние эксперимента

Требуется дополнительный

  • Эксперимент имеет много экспериментов

нужная таблица записейчтобы иметь идентификатор int (11), эксперимент_ид int (11), содержимое ТЕКСТ, созданный DATETIME

, если у вас все в порядке, используя поле DATETIME для отметки времени, тогда я предлагаю использовать ** созданный , поскольку cakephpавтоматическое заполнение для вас.

вместо обновления эксперимента вы добавляете эксперимент.

в методе afterSave ExperimentEntry вы делаете

$this->Experiment->id = $this->data['ExperimentEntry']['experiment_id'];
$latestSummary = $this->Experiment->field('result_summary');
$latestSummary .= $this->data['ExperimentEntry']['content']; // you may need to add a newline before you append. up to you
$this->Experiment->save(array(
  'Experiment' => array(
    'result_summary' => $latestSummary
)));

Код не тестируется, поэтому используйте на свой страх и риск.

** нет соответствующей страницы в документах cakephp 2.0 для созданных и измененных, но определенно это работает.Я пробовал это раньше.

0 голосов
/ 17 марта 2012

Исходя из требований 3 и 4, я бы смоделировал базу данных таким образом, чтобы каждая сводная запись сохранялась в отдельной строке. Для этого вам понадобится отдельная таблица, примерно такая:

id | experiment_id | summary_entry | summary_entry_timestamp

Столбец experiment_id - это внешний ключ к связанному идентификатору в таблице experiments. Таблицы / модели связаны так, что Experiment hasMany ExperimentSummaryEntry.

Тогда для регистрации сводки результатов эксперимента нужно будет вставить новую строку в эту таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...