Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Основы ORM - Изменение записей
http://forum.kohanaframework.su/viewtopic.php?f=36&t=364
Страница 1 из 2

Автор:  admin [ 06 сен 2012, 22:27 ]
Заголовок сообщения:  Основы ORM - Изменение записей

В уроке "Основы ORM - Изменение записей" вы узнаете, как добавлять, изменять и удалять записи посредством ORM, а также как посчитать количество записей.
Ссылка на урок:
http://kohanaframework.su/database/orm_change_data

Автор:  mamahtehok [ 06 сен 2012, 22:52 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

orm->delete() - может удалить несколько строк
При обновлении множества записей в цикле можно проходить только set, а update можно запустить после цикла обновив все измененные записи одновременно.
как-то так...

Автор:  admin [ 07 сен 2012, 00:54 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Можно примерчик кода ?
Примеры встречал или с delete_all или с циклом.

Автор:  admin [ 07 сен 2012, 01:30 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Цитата:
При обновлении множества записей в цикле можно проходить только set, а update можно запустить после цикла обновив все измененные записи одновременно.
как-то так...


У меня таким макаром только последнюю запись обновило.

Автор:  mamahtehok [ 07 сен 2012, 01:36 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Да, похоже я ошибся, ввели в заблуждения описания функции
Код:
    * Deletes a single record or multiple records, ignoring relationships.
    * Updates a single record or multiple records

или еще не реализовали.

Автор:  admin [ 07 сен 2012, 02:59 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Ну вот как-то мне это совсем не нравится. Это получается он столько запросов делает, сколько записей попадает под выборку ?
Что-то типа
DELETE FROM `articles` WHERE `id` = 8
DELETE FROM `articles` WHERE `id` = 12
DELETE FROM `articles` WHERE `id` = 27
вместо
DELETE FROM `articles` WHERE `name` = 'Тапки'

Автор:  Sergey [ 07 сен 2012, 05:05 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

admin писал(а):
Ну вот как-то мне это совсем не нравится. Это получается он столько запросов делает, сколько записей попадает под выборку ?


Пардон, а чем принципиально отличается
Код:
DELETE FROM `articles` WHERE `id` = 8

от
Код:
DELETE FROM `articles` WHERE `name` = 'Тапки'

Автор:  admin [ 07 сен 2012, 17:09 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Тем, что первого запроса может быть штук 200, а второго - только 1.
Например, так:

id----------name
1 Варежки
2 Тапки
3 Тапки
4 Кирзачи
5 Шлепанцы
6 Тапки

Автор:  Sergey [ 08 сен 2012, 18:11 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Код:
    /**
     * Delete all related entries
     *
     * @throws Kohana_Exception
     * @return int
     */
    public function delete_all()
    {
        $counter = 0;
        if ($this->_loaded)
            throw new Kohana_Exception('Method delete_all() cannot be called on loaded objects');

        foreach($this->find_all() as $o)
        {
            $o->delete();
            $counter++;
        }

        return $counter;
    }

Автор:  admin [ 08 сен 2012, 19:17 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

Ну. Я про это и говорю. Удаление в цикле.

$o->delete(); каждый раз формирует новый запрос на удаление, т.е. с каждой итерацией удаляет по одной записи.

Разве это нормально ? Если скажем мне нужно удалить все черновики статей, т.е. все записи с mark = 1
Сначала сделать их выборку, а потом в цикле проходить каждую запись и удалять. А если их 5000 ? Получится 5001 запрос.

А можно просто написать одну строку:
Код:
DB::delete('articles') ->where('mark', '=', 1);

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/