Хранение нескольких строк одновременно в CakePHP - PullRequest
1 голос
/ 13 ноября 2011

Я работаю над проектом в CakePHP 1.3, в котором будет храниться коллекция участников - каждый с именем и фамилией - и несколько результатов для каждого участника, в которых будут храниться дата, ссылка на участника, а также количество баллов..

Структура базы данных показана ниже.

CREATE TABLE `members` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `forename` varchar(255) NOT NULL,
  `surname` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `results` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(10) unsigned NOT NULL,
  `date` date NOT NULL,
  `points` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `member_id` (`member_id`)
);

Приложение работает для ввода сведений о каждом члене один за другим, что нормально - но мне нужно иметь «Добавить результаты»страница, которая перечислит каждого из членов в базе данных и позволит ввести числовое значение для количества баллов, которые этот участник получил.Каждый раз, когда результаты добавляются, все они будут на одну и ту же дату, и каждый участник всегда будет получать баллы, даже если это 0.

Может кто-нибудь дать мне указатель о том, как отобразить форму, которая соответствуетк вышеупомянутой спецификации, и как хранить несколько строк одновременно?

Заранее спасибо.

1 Ответ

2 голосов
/ 13 ноября 2011

Так как вы новичок в торте ... вот несколько советов. используйте pr($this->data) в вашем контроллере, чтобы точно узнать, какие данные вы получаете при отправке формы.

присвойте своим полям ввода соглашения об именах, как это data[YourModel][field], например, вы бы изменили <input name="points[]" type="text" /> на <input name="data[Result][points]" type="text" />, тогда в контроллере он будет доступен для

 pr($this->data['Result']['points']);

ЭКОНОМИЯ ДЛЯ НЕСКОЛЬКИХ МОДЕЛЕЙ

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

class ResultsController extends AppController {   
 var $uses = array('Member', 'Result');

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

$dataForResults = array();
$dataForResults['Result']['points'] = $this->data['Result']['points'];
$this->Result->save($dataForResults);

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

для редактирования записи это будет больше похоже на

$dataByMemberId = $this->Result->findByMemberId($data['Result']['member_id']);
$dataByMemberId['Result']['points'] = $this->data['Result']['points'];
$this->Result->save($dataByMemberId);

, который получит текущую запись этого члена в таблице «Результаты», отредактирует запись points, а затем повторно отправит ее обратно в ее местоположение в базе данных.

Немного вздохнуло, но вы должны начать.

...