Вывод даты создания последнего дочернего документа
Привет всем!
Надо вывести типа «Последняя новость от 00.00.0000»
Понимаю, что можно сделать через pdoResources, но существует ли более изящный или проще способ?
Надо вывести типа «Последняя новость от 00.00.0000»
Понимаю, что можно сделать через pdoResources, но существует ли более изящный или проще способ?
Комментарии: 28
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Как правило, желание делать что-то изящно, возникает тогда, когда в руках много известных технологий и знаний, когда видишь различные пути решения одной и той же задачи.
Но когда этого нет, то «Понимаю, что можно сделать через pdoResources,» — это шикарный вариант.
Результата нет.
Сергей, если установлен pdoTools, то используйте pdoResources с limit=1.
pdoResources будет работать как getCollection только в режиме проверки прав. Изначально он работает в облегченном режиме с массивом данных.
В твоём варианте все ресурсы указанного родителя (все!!!) с сервера полетят на клиента, а getCollection для каждой записи будет поднимать объект со всеми проверками. И всё это для того, чтобы получить одно поле одной записи. Т.е. хуже придумать нельзя.
Я выше давал ссылку как сделать это самым простым и быстрым способом.
Мы все с этого начинали. Главное — желание это исправить.
И getCollection и getObject по $criteria готовят запрос в mysql. Для такого критерия он будет примерно таким для getCollection и $getted_id=2:
А getObject просто добавит limit=1
Данные обрабатывает сортирует mysql сервер. Он это делает эффективнее, чем мы можем сделать в php. И в getObject они точно не сортируются.
Так вот, отличие getCollection и getObject ДЛЯ ДАННОГО ПРИМЕРА то, что getCollection заберет все записи с базы и займет кучу памяти, а getObject только одну и памяти понадобиться гораздо меньше.
И getCollection и getObject кроме запроса в mySQL делают, что-то еще, например проверяют есть ли доступ у юзера к объекту, но что конкректно я не разбирался и разбираться, в общем-то, не собираюсь :-). Только если что-то не так пойдет смотрю код функций. Важно только то, что getCollection и getObject выгружают данные с базы в виде xpdo объекта. Делать mySQL запросы напрямую не слишком удобно. Но если скрипт тупит или по памяти вылетает, то использую вместо getCollection getIterator или $modx->query($sql).
sql вам знать надо! учите.
Уверен, долго будешь искать ))
лог запросов mysql
SELECT… FROM `modx_site_content` AS `modResource` WHERE `modResource`.`parent` = 1
То есть, getObject получает все, а потом грузит первую запись :-(.
@Сергей Шлоков А зачем так сделано?? Память же все отстальное занимает.
И как теперь жить-то :-(. И limit через $query = $modx->newQuery долго добавлять.
Мне getObject нужен. Чтоб проверки доступа, все обработанные поля были. И чтоб не писать простыню кода каждый раз когда какое-то значение из базы нужно.
$pdo->getArray limit добавляет, но писать ['pagetitle'] раздражает. ->pagetitle короче. И создавать $pdo каждый раз надо.
Ваш modHelpers object limit ставит. И код писать короче. Но ради 1 функции грузить кучу кода явно не стоит. Загрузки 516. Не слишком популярная библиотека. Код написанный другим человеком и так бывает сложно разобрать и, чтоб добавить еще не популярный синтаксис должна быть веская причина. Ну и с первого раза библиотека просто не понравилась.
Так почему в getObject limit=1 не добавили? Кто-нибудь знает?
вот добавить $criteria->limit(1) после этой строки github.com/modxcms/revolution/blob/932472d65793a305bd8c971f21032f24068258ad/core/xpdo/om/xpdoobject.class.php#L423
и этой github.com/modxcms/revolution/blob/932472d65793a305bd8c971f21032f24068258ad/core/model/modx/modaccessibleobject.class.php#L96
Можно же просто так
Все равно и getCollection и getObject просто готовят запрос mysql Ну грубо говоря :-(
П.С. Я не про то, что для получения одного поля нужно запрашивать объект целиком.
Смешно. Сам же выше на Владимира ругаешься, а сам бездумно его код скопипастил.