Ошибка в результате пользовательского запроса

Здравствуйте!
Столкнулся вот с каким багом: выполняя в консоли запрос:
<?php
$q = $this->modx->newQuery('msProduct');
        $q->where(array(
            "id" => 1
        ));
$q->prepare();
$q->stmt->execute();
$productsData = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
print_r($productsData);
Получаю результат:
Array
(
    [0] => Array
        (
            [msProduct_id] => 1
            [msProduct_type] => document
            [msProduct_contentType] => text/html
            [msProduct_pagetitle] => Главная
            [msProduct_longtitle] => 
            [msProduct_description] => Главная страница сайта
            [msProduct_alias] => index
            [msProduct_link_attributes] => 
            [msProduct_published] => 1
            [msProduct_pub_date] => 0
            [msProduct_unpub_date] => 0
            [msProduct_parent] => 0
            [msProduct_isfolder] => 1
            [msProduct_introtext] => 
            [msProduct_content] => 
            [msProduct_richtext] => 1
            [msProduct_template] => 1
            [msProduct_menuindex] => 0
            [msProduct_searchable] => 1
            [msProduct_cacheable] => 1
            [msProduct_createdby] => 1
            [msProduct_createdon] => 1437011322
            [msProduct_editedby] => 1
            [msProduct_editedon] => 1475451509
            [msProduct_deleted] => 0
            [msProduct_deletedon] => 0
            [msProduct_deletedby] => 0
            [msProduct_publishedon] => 0
            [msProduct_publishedby] => 0
            [msProduct_menutitle] => 
            [msProduct_donthit] => 0
            [msProduct_privateweb] => 0
            [msProduct_privatemgr] => 0
            [msProduct_content_dispo] => 0
            [msProduct_hidemenu] => 0
            [msProduct_class_key] => modDocument
            [msProduct_context_key] => web
            [msProduct_content_type] => 1
            [msProduct_uri] => index.html
            [msProduct_uri_override] => 0
            [msProduct_hide_children_in_tree] => 0
            [msProduct_show_in_tree] => 1
            [msProduct_properties] => 
        )

)
Спросите, что же тут такого. А дело в том, что главная страница на сайте не является ни категорией ни, уж тем более, продуктом. В подтверждение этому, даже в результате имеется вот эта строчка:
[msProduct_class_key] => modDocument
Помогите пожалуйста разобраться. Может проблема у меня логикой и я чего-то не знаю, но я все время думал что в таких случаях выборка идет по полю class_key.
Спасибо!

UPD: Нашел заплатку. Надо добавить условие в запрос:
$q->where(array(
            "published" => 1,
            "class_key" => "msProduct"
        ));
Но хотелось бы узнать у просвященных как этот механизм работает.
Александр
20 октября 2016, 00:58
modx.pro
990
0

Комментарии: 5

    Сергей Шлоков
    21 октября 2016, 08:55
    0
    В методе $modx->newQuery() класс указывается, чтобы погрузить схему, а никак не для ограничения. Для этого есть метод where().
      Константин Ильин
      21 октября 2016, 09:44
      0
      Вопрос «новичковый», как приводить массив, который отдает newQuery, в массив без префикса
      Array
      (
          [0] => Array
              (
                  [msProduct_id] => 1
                  [msProduct_type] => document
      	    ........
      	)
      )
      Чтобы был такого вида:
      Array
      (
          [0] => Array
              (
                  [id] => 1
                  [type] => document
      	    ........
      	)
      )
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5