Программно удалить запись core_url_rewrite magento

Мне нужно добавить редирект для 30 урлов в 3 магазинах. Для этого я создал сценарий, используя который, я могу добавить URL-адреса, но проблема со сценарием заключается в том, что если путь запроса уже существует, мне нужно удалить запись и вставить новую. Я использовал для этого приведенный ниже код, он не удаляет уже существующую запись (is_system => 1 для этой записи). Может ли кто-нибудь помочь мне решить эту проблему.

$rewrite_collection = Mage::getModel('core/url_rewrite')->getCollection();
$rewrite_collection->addFieldToFilter('request_path', array('eq' => 
$request_path));
$rewrite_collection->addFieldToFilter('store_id', array('eq' => 1));
$rewrite_collection_count = $rewrite_collection->count();
if ($rewrite_collection_count < 0){
    foreach ($rewrite_collection->getItems() as $rewrite){
        $rewrite->delete();
    }
}

Mage::getModel('core/url_rewrite')
    ->setStoreId(1)
    ->setIsSystem(0)
    ->setOptions('RP')
    ->setIdPath($id_path)
    ->setRequestPath($request_path)
    ->setTargetPath($target_path)
    ->save();
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
438
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
if ($rewrite_collection_count < 0){

В приведенном выше коде только проверьте, что счетчик меньше нуля.

Пожалуйста, измените код как

if ($rewrite_collection_count > 0){
    foreach ($rewrite_collection->getItems() as $rewrite){
        $rewrite->delete();
    }
}

Позвольте мне внести в принятый ответ несколько неинтересных элементов, которые вы сможете использовать для всех будущих операций удаления / сохранения:

$transaction = Mage::getResourceModel('core/transaction');
foreach ($rewrite_collection->getItems() as $rewrite){
    $transaction->addObject($rewrite);
}
$transaction->delete(); //or $transaction->save() when you need

Это позволяет вам удалить / сохранить все объекты, которые вы передаете объекту транзакции для сохранения / удаления только в одной транзакции SQL, и откатить их, если возникает ошибка (выполняется автоматически, если возникает исключение во время сохранения одного из модели).

Кроме того, постарайтесь выработать привычку называть свои коллекции таким образом:

$rewrite_collection = Mage::getResourceModel('core/url_rewrite_collection');

вместо :

$rewrite_collection = Mage::getModel('core/url_rewrite')->getCollection();

Меньше шагов.

Другие вопросы по теме