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

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

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

admin писал(а):
А если их 5000 ? Получится 5001 запрос.


1. И как часто встречается ситуация когда нужно удалить 5000 черновиков?
2. Можно использовать триггеры
3. Можно создать хитрую таблицу (InnoDB) и использовать ссылочную целостность (внешние ключи) - тогда достаточно будет удалить одну запись в таблице черновиков, а СУБД сама позаботится о том, чтоб удалились все черновики из таблицы постов.

А вообще да - согласен, этот метод проще и в некоторых ситуациях быстрее. Да и потом если вы используете ORM никто вам не запрещает комбинировать методы взаимодействия с БД.

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

Ситуация, когда нужно удалить несколько записей, встречается довольно часто.
С черновиками - это лишь пример. 5000 черновиков бывает )) вот взять хотя бы вордпресс. Я пока урок один напишу, он успевает создать 40-50 черновиков :)
Я потом их чищу. Так это один урок и я сразу лишнее прибиваю. А в самом начале порядка 1000 скопилось, пока я плагин DelRevisions не поставил.

Цитата:
Да и потом если вы используете ORM никто вам не запрещает комбинировать методы взаимодействия с БД.

Вот ! Я ж к этому и веду. Не всегда стоит бездумно использовать ОРМ, а потом удивляться, а чой-то у меня сайт так тормозит.

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

Кстати с изменениями записей такая же фигня. Где-то встречал пример, скажем сделать все непрочитанные записи прочитанными. У поля read поменять 0 на 1. Через орм мы выбираем записи с read = 0 и в цикле меняем каждую запись на 1. А можно написать один запрос с update.

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

Не знаю, я для удаления этим пользовался
Код:
<?php defined('SYSPATH') or die('No direct script access.');

/*
 * http://forum.kohanaframework.org/discussion/8447/kohana-3-1-orm-i-save_all/p1
 */
class ORM extends Kohana_ORM
{
    /**
     * Updates all existing records
     *
     * <a href="/profile/chainable">@chainable
     * @return  ORM
     */
    public function update_all()
    {
        $this->_build(Database::UPDATE);

        if (empty($this->_changed))
        {
            // Nothing to update
            return $this;
        }

        $data = array();
        foreach ($this->_changed as $column)
        {
            // Compile changed data
            $data[$column] = $this->_object[$column];
        }

        if (is_array($this->_updated_column))
        {
            // Fill the updated column
            $column = $this->_updated_column['column'];
            $format = $this->_updated_column['format'];

            $data[$column] = $this->_object[$column] = ($format === TRUE) ? time() : date($format);
        }

        $this->_db_builder->set($data)->execute($this->_db);

        return $this;
    }

    /**
     * Delete all objects in the associated table. This does NOT destroy
     * relationships that have been created with other objects.
     *
     * @chainable
     * @return  ORM
     */
    public function delete_all()
    {
        $this->_build(Database::DELETE);

        $this->_db_builder->execute($this->_db);

        return $this->clear();
    }

}
 

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

А такая конструкция для удаления не пойдет?

Код:
ORM::factory('category')
            ->where('name', '=', ''Тапки')
            ->delete();

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

Такая конструкция удалит только первую запись.

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

yodo780 писал(а):
А такая конструкция для удаления не пойдет?

Код:
ORM::factory('category')
            ->where('name', '=', ''Тапки')
            ->delete();



Тут нужен delete_all()

Автор:  nkl [ 23 май 2013, 15:50 ]
Заголовок сообщения:  Re: Основы ORM - Изменение записей

yodo780 писал(а):
А такая конструкция для удаления не пойдет?

Код:
ORM::factory('category')
            ->where('name', '=', ''Тапки')
            ->delete();

mamahtehok писал(а):
Такая конструкция удалит только первую запись.

Такая конструкция нихера не удаляет. Говорит, что
Цитата:
Cannot delete reference model because it is not loaded.

Хотя, если заменить ->delete() на find() или find_all(); я пркрасно получаю запись которую мне нужно удалить. Ну так как в ORM записи то удаляются?

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

Цитата:
Хотя, если заменить ->delete() на find() или find_all(); я пркрасно получаю запись которую мне нужно удалить. Ну так как в ORM записи то удаляются?

А в доки никак зазлянуть? http://kohanaframework.org/3.3/guide/orm/using#deleting

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

Спасибо.

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