Страница 1 из 1

Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 11:05
Pavel555
Делаю автоудаление объявлений, опубликованных более N дней назад (доска только про продажу). Мысль такая: поставить в крон скрипт, который каждый день будет удалять необходимые записи из бд и файлы.

Подскажите, пожалуйста, как в бд и файлах правильно удалить объявление полностью, чтобы не осталось никаких его следов (картинок и прочего).

БД: во-первых, удалить запись из таблицы ore_apartment. Из каких-то еще таблиц удалять?
Файлы: какие пути?

Спасибо!

Re: Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 11:25
Xpycm
Модель Apartment, метод beforeDelete

Re: Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 13:52
Pavel555
А как его запустить из консоли сервера?

Re: Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 15:38
Xpycm
https://www.google.ru/search?q=использование+php+из+командной+строки
https://www.google.ru/search?q=как+запустить+скрипт+из+консоли

Зачем его запускать? Посмотрите что происходит в этом методе и сделайте также.
Либо, получаете объект модели Apartment через тотже findByPk и вызываете метод delete();

Документация по yii: http://www.yiiframework.com/, http://yiiframework.ru/

Re: Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 19:10
Pavel555
Вроде разобрался, спасибо! Единственно, для картинок там явно SQL запрос не указан, зато есть
Код: Выделить всё
Images::deleteDbByObjectId($this->id); 

это то же, что и
Код: Выделить всё
$sql = 'DELETE FROM {{images}} WHERE id_object="'.$this->id.'"';
        Yii::app()->db->createCommand($sql)->execute(); 

?

Re: Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 20:10
Xpycm
Не за что.

Да, вы правильно поняли. Это будет одно и то же

Re: Автоудаление старых объявлений

СообщениеДобавлено: 27 май 2015, 20:16
Xpycm
Кстати, можете для этих целей немного переписать метод checkDateEndActivity в protected\components\BeginRequest.php

этот метод деактивирует объявления, у которых закончился срок размещения ( если при создании объявления было выбран "Срок активности объявления" не "всегда" )

Можно вместо:
Код: Выделить всё
public static function checkDateEndActivity () {
    
$adEndActivity Apartment::model()->with('user')->findAll('t.date_end_activity <= NOW() AND t.activity_always != 1 AND (t.active=:status OR t.owner_active=:status)', array(':status' => Apartment::STATUS_ACTIVE));
    foreach(
$adEndActivity as $ad){
        
$ad->scenario 'update_status';
        if(isset(
$ad->user) && $ad->user->role == User::ROLE_ADMIN){
            
$ad->active Apartment::STATUS_INACTIVE;
        } else {
            
$ad->active Apartment::STATUS_INACTIVE;
            
$ad->owner_active Apartment::STATUS_INACTIVE;
        }
        
$ad->save(false);
    }


написать:
Код: Выделить всё
public static function checkDateEndActivity () {
    
$adEndActivity Apartment::model()->with('user')->findAll('t.date_end_activity <= NOW() AND t.activity_always != 1 AND (t.active=:status OR t.owner_active=:status)', array(':status' => Apartment::STATUS_ACTIVE));
    foreach(
$adEndActivity as $ad){
        
$ad->delete();
    }