Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Алесь
цитировать
Зарегистрирован: 22 Ноя 2007 19:23:20 Сообщения: 29 Откуда: Минск
|
Добавлено: 02 Июн 2008 13:43:07 Заголовок сообщения: Вставить несколько записей за один запрос. |
|
|
Нужно за один запрос вставить в таблицу несколько записей с последовательно увеличивающимися id. Например:
Есть модель событий:
таблица:
CREATE TABLE IF NOT EXISTS `events` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`description` text NOT NULL,
`forKind` tinyint(1) NOT NULL default '0',
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=76 ;
--
Модель:
app\models\event.php :
<?php
class Event extends AppModel {
var $name = 'Event';
}
Контроллер:
app\controllers\events_controller.php:
Код: |
<?php
class EventsController extends AppController {
var $name = 'Events';
var $helpers = array('Html', 'Form','Javascript' );
function add() {
$this->layout = "admin";
if (empty($this->data)) {
} else {
$this->cleanUpFields();
if ($this->Event->save($this->data)) {
//
$this->Session->setFlash('The Event has been saved');
$this->redirect('/events/index');
} else {
$this->Session->setFlash('Please correct errors below.');
}
}
}
// и ещё несколько стандартных методов
}
?>
|
app\views\event\add.thtml:
Код: |
<h2>New Event</h2>
<form action="<?php echo $html->url('/events/add'); ?>" method="post">
<div class="optional">
<?php echo $form->labelTag('Event/name', 'Name');?>
<?php echo $html->input('Event/name', array('size' => '60'));?>
<?php echo $html->tagErrorMsg('Event/name', 'Please enter the Name.');?>
</div>
<div class="optional">
<?php echo $form->labelTag( 'Event/description', 'Description' );?>
<?php echo $html->textarea('Event/description', array('cols' => '60', 'rows' => '10'));?>
<?php echo $html->tagErrorMsg('Event/description', 'Please enter the Description.');?>
</div>
<div class="optional">
<?php echo $html->checkbox('Event/forKind', null, array());?>
<?php echo $form->labelTag('Event/forKind', 'ForKind');?>
<?php echo $html->tagErrorMsg('Event/forKind', 'Please check the ForKind.');?>
</div>
<div class="submit">
<?php echo $html->submit('Add');?>
</div>
</form>
<ul class="actions">
<li><?php echo $html->link('List Events', '/events/index')?></li>
</ul>
|
Скажем если я изменю app\views\event\add.thtml таким образом, что будет по два (или 3,4,5...) экземпляра полей: "name", "description", "forKind" (естественно для одной формы). То в контроллере получу:
$this->data['Event']['name'] = 'последнее_поле_name_в_форме';
$this->data['Event']['description'] = 'последнее_поле_description_в_форме';
и т.д. ...
И следовательно сторчка $this->Event->save($this->data) в контроллере сохранит только последние значения полей. Может, есть какой-то стандратный способ обойти это неудобство? |
|
Вернуться к началу |
|
|
Hellbot
цитировать
Зарегистрирован: 19 Май 2008 16:29:15 Сообщения: 34
|
Добавлено: 02 Июн 2008 15:02:20 Заголовок сообщения: |
|
|
Не совсем понятно, в чем проблема:
- получить из формы несколько значений
- сохранить несколько моделей ? |
|
Вернуться к началу |
|
|
Алесь
цитировать
Зарегистрирован: 22 Ноя 2007 19:23:20 Сообщения: 29 Откуда: Минск
|
Добавлено: 02 Июн 2008 15:37:16 Заголовок сообщения: |
|
|
Для одной модели, получаем несколько значений формы.
таким образом, что будет по два (или 3,4,5...) экземпляра полей: "name", "description", "forKind" (естественно для одной формы) . Нужно чтобы они все ДОБАВИЛИСЬ в таблицу. |
|
Вернуться к началу |
|
|
Hellbot
цитировать
Зарегистрирован: 19 Май 2008 16:29:15 Сообщения: 34
|
Добавлено: 02 Июн 2008 15:54:52 Заголовок сообщения: |
|
|
Алесь
Мы уже получили несколько значений формы и у нас проблема сохранить, или мы получаем только последнее значение ?
Повторить 3 раза
Код: | $this->Model->create($this->data)
$this->Model->save(); |
будет 3 записи, с одинаковыми данными.
в 1.1 не много по другому, если я правильно помню, но в целом аналогично
Код: | $this->Model->id = 0;
$this->Model->save($this->data);
|
Что бы получить 3 разных поля в $this->data, нужно отправлять поля с другими названиями.
Я точно не помню как это в 1.1, но например
Код: |
<?php echo $html->input('Event/name', array('size' => '60', 'name' => 'data[]['Event']['name']));?> |
тогда в $this->data будет массив Event'ов. |
|
Вернуться к началу |
|
|
Алесь
цитировать
Зарегистрирован: 22 Ноя 2007 19:23:20 Сообщения: 29 Откуда: Минск
|
Добавлено: 02 Июн 2008 16:01:31 Заголовок сообщения: |
|
|
Мы получаем только последнее значение. Спасибо. 'name' => 'data[]['Event']['name']) - это, то что нужно (наверное) . Сейчас потесцю.
Не. работает:
код: Код: | <?php echo $html->input('Date/', array('size' => '10','maxlength'=>'10','id'=>'Date', 'name' => 'data[][Event][name]'));?>
|
В браузере:
Код: |
<input id="Date" type="text" value="" name="data[Date][]" maxlength="10" size="10"/> |
|
|
Вернуться к началу |
|
|
Hellbot
цитировать
Зарегистрирован: 19 Май 2008 16:29:15 Сообщения: 34
|
Добавлено: 02 Июн 2008 16:41:14 Заголовок сообщения: |
|
|
Либо ручками рисовать поля
много event
Код: | <input id="Date" type="text" value="" name="data[][Event][Date]" maxlength="10" size="10"/> |
много date в event
Код: | <input id="Date" type="text" value="" name="data[Event][][Date]" maxlength="10" size="10"/> |
либо в 1.2 есть подобный функционал
который чуть ли не автомагически (любое слово) через saveAll сохраняется. |
|
Вернуться к началу |
|
|
Алесь
цитировать
Зарегистрирован: 22 Ноя 2007 19:23:20 Сообщения: 29 Откуда: Минск
|
Добавлено: 02 Июн 2008 16:52:34 Заголовок сообщения: |
|
|
А вот за функционал - Спасибо! Вот это я и искал. Благодарю!!! |
|
Вернуться к началу |
|
|
|