Как мне получить все поля заказа?
-
13-12-2019 - |
Вопрос
Я работаю с Magento, у меня есть заказы, и я их печатаю вот так:
echo $order->getId();
echo $order->getCustomerEmail();
Моя проблема в том, что я не знаю всех названий методов get, так как и где я могу найти весь список доступных методов get?
Моя цель — экспортировать все заказы во внешнюю базу данных. Есть ли более быстрый способ сделать это без прохода для каждого поля?
Решение
Данные о заказе (или любом объекте) хранятся в защищенной переменной-члене. _data
который представляет собой массив.Эти данные поступают из таблиц базы данных (они заполняются моделью ресурсов).
Массив данных
Вы можете получить этот массив и сбросить его через:
print_r($order->getData());
// or
var_dump($order->getData());
Вы получите такой результат с помощью print_r()
:
Array
(
[entity_id] => 2
[state] => new
[status] => pending
// ...
Геттеры
Теперь вы можете получить все эти данные с помощью магических геттеров объекта Magento.Каждое значение можно получить в виде $object->getValue()
где Value
— это версия ключа из массива в верблюжьем корпусе.
Для вышеуказанных значений используйте:
$order->getEntityId();
$order->getState();
$order->getStatus();
И для customer_id
например, вы можете позвонить $order->getCustomerId()
Переопределения
Геттеры могут быть переопределены.Конструкция геттеров определена в Varien_Object
класс, и каждая модель Magento может переопределить магический метод получения, явно определив метод.Поэтому вам также следует проверить методы модели, просмотрев код или использовать подсказки в своей IDE.
Другие советы
Вы можете просто распечатать все доступное поле в своем объекте с:
print_r($order->getData())
. Заказы не хранятся в формате EAV, поэтому все данные находятся в простой таблице.Загрузив sales/order
экземпляр модели, вы загружаете строку из sales_flat_order
таблицу, поэтому любой столбец, который вы здесь видите, можно извлечь из объекта заказа, т. е. вытащить increment_id
столбец, вы можете позвонить $order->getIncrementId()
.Также имейте в виду, что в Mage_Sales_Model_Order
объект класса, чтобы создать для вас определенный объем данных, например getCustomerName()
который возвращает имя клиента, но не относится к customer_name
столбец в sales_flat_order
стол .
попробуйте
foreach($order->getData() as $key => $value)
{
//$key;
//$value
}
. одно строка решение:
array_keys($order->getData())
. $resource = Mage::getSingleton('core/resource');
$readConnection = $resource->getConnection('core_read');
/**
* Get the table name
*/
$tableName = $resource->getTableName('sales/order');
$saleafield=$readConnection->describeTable($tableName);
var_dump($saleafield);
.
из: https://stackoverflow.com/questions/25245862/get-Все поле-имен - от Magento-Model