Ошибка 502, чертовщина какая-то

Ничего не понимаю, использую запрос вида
$sql = "
SELECT  t1.category_solution_id,
        t2.pagetitle as category

FROM `modx_mstr_solution_subcategory` as t1

LEFT OUTER JOIN `modx_site_content` as t2
ON t1.category_solution_id = t2.id

WHERE t1.solution_id = 1

ORDER BY t1.id ASC
";
$q = new xPDOCriteria($modx, $sql);
$items = $modx->getCollection('SubcategorySolution', $q);
foreach ($items as $item){
    print_r($item->toArray());
}
выдает 502 ошибку. Запрос в phpmyadmin проверял, прекрасно работает. При этом похожие запросы в других сниппетах работаю на ура. Для чистоты эксперемента создал новый тестовый ресурс и тестовый сниппет, дает ошибку.
При этом если использовать так:
$q = $modx->prepare($sql);
$q->execute();
$res = $q->fetchAll(PDO::FETCH_ASSOC);

foreach ($items as $item) {
	echo $item['field'];
}
то все нормально. Что за чертовщина, ни кто не сталкивался?

ЗЫ: Только что упростил запрос до
$sql = "
SELECT  category_solution_id
FROM `modx_mstr_solution_subcategory`
WHERE solution_id = 1
";
такая же ерунда 502 ошибка
Владимир Бабусенко
17 февраля 2016, 23:16
modx.pro
1 853
0

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

Василий Наумкин
18 февраля 2016, 08:35
+1
Для создания объекта xPDO нужно выбирать первичный ключ. Обычно это колонка id.
    Владимир Бабусенко
    18 февраля 2016, 10:59
    0
    Василий как всегда прав. Это видимо особенность xPDO. Уже вчера (вернее сегодня ночью) дошел до этого «методом тыка».
    ЗЫ: Хотя странное поведение, как я понимаю при таком запросе даже если мы перечисляем поля, возметься объект полностью со всеми полями.
    Сергей Шлоков
    18 февраля 2016, 09:00
    0
    А вы модель-то свою загружаете? Наверняка в логе много сообщений на тему «не найден класс».
      Владимир Бабусенко
      18 февраля 2016, 11:02
      0
      Все банально оказалось, смотрите ответ Василия. Вы можете сами попробовать например выбрать из таблицы `modx_site_content` выбрать какое либо поле, какого либо ресурса, без указания в выборке поля id, будет 502 ошибка.
        Сергей Шлоков
        18 февраля 2016, 11:30
        0
        Это то да. Только одно дело выбрать из системной таблицы `modx_site_content`, а другое из своей. Через xPDO это работать не должно без загрузки модели. Удивлен, что описанный пример работает. Либо вы чего-то не договариваете и модель загружается в extentionPackage, либо что-то поменялось в MODX.

        Update. Взял ваш код и подставил свой класс и получил ожидаемую ошибку
        Could not load class: oneBookingObjects from mysql.onebookingobjects.
          Владимир Бабусенко
          18 февраля 2016, 11:39
          0
          Я не первый год замужем, с модексом достаточно давно работаю. Модели загружены.
            Владимир Бабусенко
            18 февраля 2016, 11:42
            0
            Update. Взял ваш код и подставил свой класс и получил ожидаемую ошибку
            Could not load class: oneBookingObjects from mysql.onebookingobjects.

            Я не совсем зеленый. Конечно будет ошибка, если вы мой код и модель возмете (ее то у вас нету). Вы проверьте на системной модели, или на какой либо своей загруженной модели.
              Сергей Шлоков
              18 февраля 2016, 11:45
              -1
              Я не совсем зеленый.
              Но не внимательный точно :)
                Владимир Бабусенко
                18 февраля 2016, 11:52
                +1
                Как я понимаю, ваш подставленный класс не загружен. Повторюсь еще раз моя модель загружен в extentionPackage.
                И при запросе через $modx->newQuery() работает. Вы же не станете утверждать что модель не загружена?
        Николай
        18 февраля 2016, 09:37
        0
        Могу предложить свой вариант:

        $sql = "
        SELECT  t1.category_solution_id,
                t2.pagetitle as category
        
        FROM `modx_mstr_solution_subcategory` as t1
        
        LEFT OUTER JOIN `modx_site_content` as t2
        ON t1.category_solution_id = t2.id
        
        WHERE t1.solution_id = 1
        
        ORDER BY t1.id ASC
        ";
        
        $q = $modx->prepare($sql);
        $q->execute();
        $res = $q->FetchAll(PDO::FETCH_ASSOC);
        
        foreach($res as $v) {
        print)r($v);
        }
          Владимир Бабусенко
          18 февраля 2016, 11:06
          +1
          Спасибо, в вопросе я писал что при таком варианте ошибки нет, меня интересовала выборка объектом xPDO, а не PDO.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11