Одним INSERT`ом!
Одним INSERT`ом!
Всем привет!
Сорри, если вопрос глупый,новичок в yii!
Например, из формы получаю массив номеров телефонов!
Все их нужно записать в таблицу с помощью ActiveRecord!
Как сделать,чтобы не бежать по массиву и не вызывать каждый раз метод $model->save() для каждой записи, а вставить целиком все данные(телефоны) в таблицу??
Возможно ли такое?
Сорри, если вопрос глупый,новичок в yii!
Например, из формы получаю массив номеров телефонов!
Все их нужно записать в таблицу с помощью ActiveRecord!
Как сделать,чтобы не бежать по массиву и не вызывать каждый раз метод $model->save() для каждой записи, а вставить целиком все данные(телефоны) в таблицу??
Возможно ли такое?
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Одним INSERT`ом!
Человека интересует вариант без цикловIceDragon писал(а):я бы сказал
http://yiiframework.ru/doc/guide/ru/form.table
Twitter: @timlar_ua
Re: Одним INSERT`ом!
Спасибо за ответы, ушел разбираться!!
Re: Одним INSERT`ом!
и так и так циклы.
по ссылке таблицы + форма - сохранение идет без цикла, в цикле только валидация.
по ссылке таблицы + форма - сохранение идет без цикла, в цикле только валидация.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Одним INSERT`ом!
А как ты сохранять после валидации собрался? Не циклами, случайно?IceDragon писал(а):по ссылке таблицы + форма - сохранение идет без цикла, в цикле только валидация.
Twitter: @timlar_ua
Re: Одним INSERT`ом!
А по моему вопрос не корректен. Что именно требуется ?
1 - Создать столько новых записей в таблице сколько получено номеров телефонов ?
2 - Или сохранить все полученные телефоны в 1-ой новой записи ?
Если 1 - то пододут оба предложенных варианта. И в том и в другом случае идет цикл обращений к бд, просто на ссылке Timlar чикл записи идет внутри экземпляра класса CActiverecord. Я конечно точно не уверен, слишком до фига ньюансов что бы все знать, но по моему сама Mysql не может создавать несколько записей из 1 запроса.
Если вариант 2, то слить циклом foreach массив в 1 переменную и ее отправить на запись.
1 - Создать столько новых записей в таблице сколько получено номеров телефонов ?
2 - Или сохранить все полученные телефоны в 1-ой новой записи ?
Если 1 - то пододут оба предложенных варианта. И в том и в другом случае идет цикл обращений к бд, просто на ссылке Timlar чикл записи идет внутри экземпляра класса CActiverecord. Я конечно точно не уверен, слишком до фига ньюансов что бы все знать, но по моему сама Mysql не может создавать несколько записей из 1 запроса.
Если вариант 2, то слить циклом foreach массив в 1 переменную и ее отправить на запись.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Одним INSERT`ом!
Aver писал(а):Я конечно точно не уверен, слишком до фига ньюансов что бы все знать, но по моему сама Mysql не может создавать несколько записей из 1 запроса.
Код: Выделить всё
INSERT INTO `users` (`name` , `age` , `country` , `city`) VALUES
('Евгений', 26, 'Россия', 'Москва'),
('Вадим', 31, 'Россия', 'Рязань'),
('Артур', 22, 'Россия', 'Санкт-Петербург');
Twitter: @timlar_ua
Re: Одним INSERT`ом!
Ан нет. Порылся в документации mysql, можно в запрос вынести создание нескольких записей. Но вот осуществимо ли это через CActiverocord сказать не могу.
Опередели меня на минуту.
Однако в вашем варианте, Timlar это не осуществлено. Там просто в классе идет перебор обращений к методу save.
Опередели меня на минуту.
Однако в вашем варианте, Timlar это не осуществлено. Там просто в классе идет перебор обращений к методу save.
Re: Одним INSERT`ом!
Вот как раз это мне и нужно, только средствами ActiveRecord, сейчас пытаюсь сделать как по ссылке, которую Вы дали, но пока не получилось, буду дальше разбираться!Timlar писал(а):Aver писал(а):Я конечно точно не уверен, слишком до фига ньюансов что бы все знать, но по моему сама Mysql не может создавать несколько записей из 1 запроса.Без проблем, абсолютноКод: Выделить всё
INSERT INTO `users` (`name` , `age` , `country` , `city`) VALUES ('Евгений', 26, 'Россия', 'Москва'), ('Вадим', 31, 'Россия', 'Рязань'), ('Артур', 22, 'Россия', 'Санкт-Петербург');
Re: Одним INSERT`ом!
Так и не найдено было решение проблемы с помощью CActiveRecord? Хотелось бы вставлять массив данных в один запрос, а не инициировать новый запрос для каждого элемента массива (сейчас столкнулся с проблемой вставлять каждый раз по несколько десятков записей, если делать save() как в первой ссылке Timlar, то это будет слишком накладно).
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Одним INSERT`ом!
CActiveRecord не предназначен для таких задач. Используйте SQL или CDbCommandBuilder.
Нравится Yii? Давайте сделаем его лучше!.