В чем разница между полем и атрибутом?


В терминальном журнале Magento иногда переменные называются attribute, а иногда name.

Хотя случай атрибута ясен и это означает атрибут в модели EAV, случай поля неясен.

Например, в файле app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php есть функция с именем joinAttribute и есть другая joinField, которая имеет две совершенно разные реализации.

Но, например, в этом файле это метод addFieldToFilter:

  public function addFieldToFilter($attribute, $condition = null)
  {    
      return $this->addAttributeToFilter($attribute, $condition);
  }  

Который по-видимому, это означает, что эти два понятия одинаковы.

В чем разница между field и attribute?

Author: shampoo, 2017-02-11

2 answers

Разница между полем ч/б и атрибутом

В Magento есть два вида моделей. 1. Объект подслушивания 2. Плоская сущность

Сущность Eav (Сущность-Атрибут-Значение) использует несколько таблиц для функционирования. Здесь атрибут действует как посредник, как вы можете видеть в полном определении. атрибут ie соединяет сущность с ее реальными данными. Для достижения этой цели необходимо как минимум 3 таблицы. Один для сущности, другой для атрибута и, наконец, один для хранения реальных данных (т. Е. значений). Однако в случае Magento это намного сложнее (включает в себя более 3 таблиц), в которые я не хочу погружаться. Ключевым моментом здесь является то, что для сущности eav атрибуты также работают как поля. Поле означает "пространство" для хранения "чего-то" (в нашем случае это значения). В этом смысле атрибуты eav являются полями сущности eav. Клиент, продукты, категории являются примерами сущности eav.

Плоские объекты являются обычными объектами. Они используют отношения "одна сущность - одна таблица". В плоской сущности таблица, каждый столбец можно рассматривать как поля. Таким образом, для плоской сущности связь с данными является прямой. Его объем данных несколько постоянен и не "БОЛЬШОЙ", и, следовательно, им можно управлять своими свойствами и отношениями данных с помощью одной таблицы.

Относительно addFieldToFilter(), которые вы можете увидеть в внедрении коллекции eav.

То, что вы видите там, addFieldToFilter() просто действует как оболочка addAttributeToFilter(). Также здесь жизненно важно прочитать документацию, представленную по этому методу. В нем говорится:

Оболочка для совместимости с Varien_Data_Collection_Db

Таким образом, это дает вам первый намек на то, что Varien_Data_Collection_Db, который является родительским классом Mage_Eav_Model_Entity_Collection_Abstract (который также является родительским классом коллекции плоских моделей), также определяет addFieldToFilter(). Если вы заглянете в Varien_Data_Collection_Db::addFieldToFilter(), вы легко обнаружите, что его реализация предназначена для работы с фильтрацией коллекций плоских сущностей, которые не подходят для фильтра сущностей eav.

Таким образом, этот метод существует по двум причинам:

  1. Чтобы полностью удалить обычная фильтрация коллекций для объектов eav и, следовательно, она просто обертывает метод фильтрации коллекций, предназначенный для объектов eav, т. Е. addAttributeToFilter().

  2. Это также позволяет нам использовать как addAttributeToFilter(), так и addFieldToFilter() для фильтра сбора объектов eav.

Надеюсь, это прояснит ваши сомнения.

 2
Author: Rajeev K Tomy, 2017-02-11 12:47:23

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

 0
Author: Prasanta Hatui, 2017-02-11 11:32:36