Ошибка 502, чертовщина какая-то
Ничего не понимаю, использую запрос вида
выдает 502 ошибку. Запрос в phpmyadmin проверял, прекрасно работает. При этом похожие запросы в других сниппетах работаю на ура. Для чистоты эксперемента создал новый тестовый ресурс и тестовый сниппет, дает ошибку.
При этом если использовать так:
ЗЫ: Только что упростил запрос до
$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());
}
При этом если использовать так:
$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 ошибкаКомментарии: 11
Для создания объекта xPDO нужно выбирать первичный ключ. Обычно это колонка id.
Василий как всегда прав. Это видимо особенность xPDO. Уже вчера (вернее сегодня ночью) дошел до этого «методом тыка».
ЗЫ: Хотя странное поведение, как я понимаю при таком запросе даже если мы перечисляем поля, возметься объект полностью со всеми полями.
ЗЫ: Хотя странное поведение, как я понимаю при таком запросе даже если мы перечисляем поля, возметься объект полностью со всеми полями.
А вы модель-то свою загружаете? Наверняка в логе много сообщений на тему «не найден класс».
Все банально оказалось, смотрите ответ Василия. Вы можете сами попробовать например выбрать из таблицы `modx_site_content` выбрать какое либо поле, какого либо ресурса, без указания в выборке поля id, будет 502 ошибка.
Это то да. Только одно дело выбрать из системной таблицы `modx_site_content`, а другое из своей. Через xPDO это работать не должно без загрузки модели. Удивлен, что описанный пример работает. Либо вы чего-то не договариваете и модель загружается в extentionPackage, либо что-то поменялось в MODX.
Update. Взял ваш код и подставил свой класс и получил ожидаемую ошибку
Update. Взял ваш код и подставил свой класс и получил ожидаемую ошибку
Could not load class: oneBookingObjects from mysql.onebookingobjects.
Я не первый год замужем, с модексом достаточно давно работаю. Модели загружены.
Update. Взял ваш код и подставил свой класс и получил ожидаемую ошибку
Could not load class: oneBookingObjects from mysql.onebookingobjects.
Я не совсем зеленый. Конечно будет ошибка, если вы мой код и модель возмете (ее то у вас нету). Вы проверьте на системной модели, или на какой либо своей загруженной модели.
Could not load class: oneBookingObjects from mysql.onebookingobjects.
Я не совсем зеленый. Конечно будет ошибка, если вы мой код и модель возмете (ее то у вас нету). Вы проверьте на системной модели, или на какой либо своей загруженной модели.
Я не совсем зеленый.Но не внимательный точно :)
Как я понимаю, ваш подставленный класс не загружен. Повторюсь еще раз моя модель загружен в extentionPackage.
И при запросе через $modx->newQuery() работает. Вы же не станете утверждать что модель не загружена?
И при запросе через $modx->newQuery() работает. Вы же не станете утверждать что модель не загружена?
Могу предложить свой вариант:
$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);
}
Спасибо, в вопросе я писал что при таком варианте ошибки нет, меня интересовала выборка объектом xPDO, а не PDO.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.