SOS: Call to a member function clearEntities() on a non-object

#
SOS: Call to a member function clearEntities() on a non-object
В ходе запроса

$oShopRandomItems = Core_QueryBuilder::select()...

получаю массив с выборкой нужных товаров:

$aShopRandomItems = $oShopRandomItems->execute()->asAssoc()->result();

пытаюсь передать в сущность к товару:

foreach($aShopRandomItems as $oShopRandomItem){
   $oXmlRandomItems->addEntity(
      $oShopRandomItem->clearEntities()
         ->addForbiddenTag(array('text', 'description'))
         ->showXmlProperties(TRUE)
   );
}

однако получаю ошибку:
Fatal error: Call to a member function clearEntities() on a non-object in...
ссылается на строку $oShopRandomItem->clearEntities()

Применяется метод к не объекту

Подскажите, форумчане, какое должно быть правильно решение?
Заранее всем откликнувшимся СПАСИБО!
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Модератор
#
Re: SOS: Call to a member function clearEntities() on a non-object
$aShopRandomItems - у вас массив массивов, но вы почему то в foreach() переменную называете $oShopRandomItem и считаете, что там у вас объект, о чем вам PHP и сообщает: Call to a member function clearEntities() on a non-object
Непонятно, зачем вы используете напрямую запрос к БД, вместо ORM+QueryBuilder
#
Re: SOS: Call to a member function clearEntities() on a non-object
hostcms писал(а):
$aShopRandomItems - у вас массив массивов, но вы почему то в foreach() переменную называете $oShopRandomItem

то есть нужно внутри одного foreach() вызвать ещё один?
hostcms писал(а):
Непонятно, зачем вы используете напрямую запрос к БД, вместо ORM+QueryBuilder

любим сложности
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Модератор
#
Re: SOS: Call to a member function clearEntities() on a non-object
EZ-Web писал(а):
то есть нужно внутри одного foreach() вызвать ещё один?

у вас там вообще нет объекта.
foreach($aShopRandomItems as $oShopRandomItem){
var_dump($oShopRandomItem);
...

и посмотрите что у вас там.

если уж хотите, то правильно будет так
$aShopRandomItems = $oShopRandomItems->execute()->asObject('Shop_Item_Model')->result();
#
Re: SOS: Call to a member function clearEntities() on a non-object
сделал так:
$aShopRandomItems = $oShopRandomItems->execute()->asObject('Shop_Item_Model'->result();
теперь такая ошибка:
Exception: Could not execute Shop_Item_Model::__construct()

а если сделать так

$aShopRandomItems = $oShopRandomItems->execute()->asAssoc()->result();
// $aShopRandomItems = $oShopRandomItems->execute()->asObject('Shop_Item_Model')->result();

foreach($aShopRandomItems as $oShopRandomItem) {
   var_dump($oShopRandomItem);
   /*
   $oXmlRandomItems->addEntity(
      $oShopRandomItem->clearEntities()
         ->addForbiddenTag(array('text', 'description'))
         ->showXmlProperties(TRUE)
   );
   */
}

то на странице видим:

array(61) { ["id"]=> string(6) "161703" ["shortcut_id"]=> string(1) "0" ["shop_tax_id"]=> string(1) "0" ["shop_seller_id"]=> string(1) "0" ["shop_group_id"]=> string(4) "1991" ["shop_currency_id"]=> string(1) "1" ["shop_id"]=> string(1) "4" ["shop_producer_id"]=> string(1) "0" ["shop_measure_id"]=> string(1) "0" ["type"]=> string(1) "0" ["name"]=> string(57)....

Знания имеют свои пределы, и только глупость человеческая не знает границ...
Модератор
#
Re: SOS: Call to a member function clearEntities() on a non-object
EZ-Web писал(а):
Exception: Could not execute Shop_Item_Model::__construct()

https://www.hostcms.ru/documentation/modules/core/orm/
При объединении с другими таблицами, в результирующий набор выбираются поля из всех таблиц. Учитывая, что модели могут быть заданы только (1) её свойства, (2) data-атрибуты, (3) public-свойства модели, (4) свойства, перехваченные через хуки, то при попытке установить несуществующее свойство будет сгенерировано исключение Exception: Could not execute ..._Model::__construct(). Учитывая вышеизложенное, при объединении таблиц необходимо явно указывать таблицу через ->clearSelect()->select('таблица.*', из которой нужно выбирать значения
#
Re: SOS: Call to a member function clearEntities() on a non-object
спасибо! нужные товары попали в XML
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Авторизация