Случайные комментарии в макете страницы

#
Случайные комментарии в макете страницы
Хотел бы вывести небольшой перечень случайных комментариев к товарам в макете страницы.
Для этого делаю вот что.

// Комментарии о товарах на главной странице
$oShop = Core_Entity::factory('Shop', $id );

$Shop_Controller_Show = new Shop_Controller_Show( $oShop );

$oShop = $Shop_Controller_Show->getEntity();

$oComment = Core_Entity::factory( 'Comment' );

$oComment->queryBuilder()
   ->select( 'comments.*' )
   ->join( 'comment_shop_items', 'comment_shop_items.comment_id', '=', 'comments.id' )
   ->join( 'shop_items', 'comment_shop_items.shop_item_id', '=', 'shop_items.id' )
   ->where( 'shop_items.shop_id', '=', 4 )
   ->where('shop_items.deleted', '=', 0)
   ->where('comments.deleted', '=', 0 )
   ->orderBy( 'RAND()' )
   ->limit(3);

$aShop_Item_Comment = $oComment->findAll(FALSE);

$Shop_Controller_Show->addEntities( $aShop_Item_Comment )
   ->xsl(
      Core_Entity::factory('Xsl')->getByName( $xslName )
   )
   ->show();


Это всё добавляет в XML лишь три элемента comment, в которых нет информации о товарах.
Я хотел бы добавить туда еще и информацию о товаре, к которому комментарий был оставлен. Если я в консоли MySQL пишу такой запрос:
SELECT
`comments`.*, `shop_items`.`name` AS `shop_item_name`, `shop_items`.`path` AS `shop_item_path`
FROM `comments`
INNER JOIN `comment_shop_items` ON `comment_shop_items`.`comment_id` = `comments`.`id`
INNER JOIN `shop_items` ON `comment_shop_items`.`shop_item_id` = `shop_items`.`id`
WHERE  `shop_items`.`shop_id` = 4 AND `shop_items`.`deleted` = 0 AND `comments`.`deleted` = 0 AND `comments`.`deleted` = 0
ORDER BY RAND() ASC
LIMIT 3

, то получаю результирующую таблицу с нужными мне полями. Но я не могу понять, как именно мне нужно использовать queryBuilder(), чтобы получить этот же результат.

И достаточно ли будет метода addEntities(), чтобы в XML в поля comment попали еще и данные о товарах? Подскажите, пожалуйста.
#
Re: Случайные комментарии в макете страницы
lezhenkin,
$oShop = $Shop_Controller_Show->getEntity();

$oComments = Core_Entity::factory('Comment');
$oComments->queryBuilder()
    ->straightJoin()
    ->join('comment_shop_items', 'comments.id', '=', 'comment_shop_items.comment_id')
    ->join('shop_items', 'comment_shop_items.shop_item_id', '=', 'shop_items.id')
    ->where('shop_items.shop_id', '=', $oShop->id)
    ->where('shop_items.deleted', '=', 0)
    ->where('comments.active', '=', 1)
    ->where('comments.deleted', '=', 0 )
    ->clearOrderBy()
    ->orderBy('RAND()');

$aComments = $oComments->findAll();

foreach ($aComments as $Comments)
{
    $oShop_Item = $Comments->Shop_Item;

    $Shop_Controller_Show->addEntity(
        $Comments->addEntity(
            $oShop_Item->clearEntities()
        )
    );
}
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Случайные комментарии в макете страницы
Seri, благодарю вас. По-быстрому глянул результат, похоже, это то, что мне было нужно. Спасибо =)
#
Re: Случайные комментарии в макете страницы
Seri, подскажите, пожалуйста, вот что еще.
Как мне поместить полученные данные в отдельный XML-тег ? Если я использую это:

Core::factory('Core_Xml_Entity')->name( $name )->value($value)


то могу поместить в такой XML-тег информацию в виде строки. А вот как туда поместить данные из объекта?
#
Re: Случайные комментарии в макете страницы
Пример в документации https://www.hostcms.ru/documentation/modules/core/controllers/

Добавление тега и размещение в него объекта:

// Новый тег
$oMytag = Core::factory('Core_Xml_Entity')->name('mytag');

// В него помещаем объект $oMyObject
$oMytag->addEntity($oMyObject->clearEntities());

$Shop_Controller_Show->addEntity($oMytag);
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Случайные комментарии в макете страницы
llirik, благодарю вас. Искал, искал... да не там, где нужно было.
Авторизация