Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Вставить несколько записей за один запрос.

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
Алесь

цитировать



Зарегистрирован: 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) в контроллере сохранит только последние значения полей. Sad Может, есть какой-то стандратный способ обойти это неудобство? Question
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
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']) - это, то что нужно (наверное) . Smile Сейчас потесцю.

Sad Не. работает:
код:
Код:
 <?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    Заголовок сообщения: Ответить с цитатой

А вот за функционал - Спасибо! Вот это я и искал. Благодарю!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru