Автоудаление старых объявлений
Добавлено:
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();
}
}