Обновить значение одного атрибута


Я новичок в Magento, поэтому, пожалуйста, простите меня, если это так... дерьмо в коде... Отправка запроса Ajax с идентификатором бренда и текущим состоянием "статус = 1 или 0" и хотел бы обновить состояние в таблице:

public function BrandsAction()
{
    $brand_id = $this->getRequest()->getPost("brand_id");
    $status = $this->getRequest()->getPost("status");
    $_category = Mage::getResourceModel('catalog/category_collection')
            ->addFieldToFilter('name', 'Brands')
            ->getFirstItem();

    $categoryId = $_category->getId();
    $brands = Mage::getModel('catalog/category')->load($categoryId);
    $brand = $brands->load($brand_id);
    foreach($brand as $element){
        echo $element;
        if($element->getId() == $brand_id){
            $element->getData();
            $element->getAttribute('show_brand');
            $element->setData('show_brand',$status);
            $element->save();
        }
    }

Я ожидал, что он обновит значение в столбце "show_brand", но на самом деле он ничего не делает, просто возвращает данные обратно, поэтому я могу видеть в консоли, какие значения были отправлены. Как обновить значение для указанной "категория -> Бренд -> Какой-то бренд"?? Я что-то пропустил ?

//just checking category id
$categoryId = $_category->getId();
//loading selected category
$brands = Mage::getModel('catalog/category')->load($categoryId);
//Loading Brand Data
$brand = $brands->load($brand_id);

Не так ли? Или я что-то неправильно понял?

Текущий код:

    public function BrandsAction()
    {
    $brandNameId = $this->getRequest()->getPost("brand_id");
    $status = $this->getRequest()->getPost("status");
    $brandsNameCat = Mage::getModel('catalog/category')->load($brandNameId);
    $brandsNameCat->setShowBrand($status);
    $brandsNameCat->save();
    }

Не обновляет значения в таблице... что я должен проверить, чтобы убедиться, что он обновит значения?

Author: Rob D. A., 2017-04-28

2 answers

В этом случае приведенный ниже код должен работать

<?php
function BrandsAction()
{
    $brand_id = $this->getRequest()->getPost("brand_id");
    // I assume $brand_id is your brand name category id which is subcategory or brands (Parent category)
    $status = $this->getRequest()->getPost("status");
    $brandsNameCat = Mage::getModel('catalog/category')->load($brand_id);
    $brandsNameCat->setShowBrand($status);
    $brandsNameCat->save();
}
 1
Author: Akhilesh Patel, 2017-04-28 10:27:43

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

$brandsNameCat->save();

С помощью:

$brandsNameCat->saveAttribute($brandsNameCat, 'show_brand');
 3
Author: Raphael at Digital Pianism, 2017-04-28 10:34:32