Почему не срабатывает select на modResource?
        В консоле пишу код
    
    
                                                        <?php
$c = $modx->newQuery('modResource');
$c->select('`modResource`.`id`,`modResource`.`pagetitle`');
$c->prepare(); echo $c->toSQL();
$data = $modx->getCollection('modResource',$c);
foreach($data as $v){
    echo "<pre>".print_r($v->toArray(),1)."</pre>";
}Получаю выводSELECT `modResource`.`id`, `modResource`.`pagetitle` FROM `modx_site_content` AS `modResource`
Array
(
    [id] => 1
    [type] => 0
    [contentType] => text/html
    [pagetitle] => Главная
    [longtitle] => Поздравляем!
    [description] => 
    [alias] => index
    [alias_visible] => 1
    [link_attributes] => 
    [published] => 1
    [pub_date] => 0
...В запросе написано получать только id и pagetitle. В SQL только id и pagetitle. Откуда в результатах все поля modResource?    
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            Комментарии: 2
                Потому что ты запрашиваешь объекты. И тебе выводятся поля из объекта.
Для понимания. Если ты создашь новый пустой объект и выведешь его
В твоём случае, ты инициализируешь указанные в select поля объектов данными из базы. Остальные поля — так называемые lazy. Они инициализируются из кэша. Если кэша нет, то делается запрос в базу и сохраняется в кэш.
Если нужно получить массив данных (что предпочтительней), то лучше делать так
                    Для понимания. Если ты создашь новый пустой объект и выведешь его
$resource = new modResource(...);
$resource->toArray();то тоже получишь все поля, но пустые.В твоём случае, ты инициализируешь указанные в select поля объектов данными из базы. Остальные поля — так называемые lazy. Они инициализируются из кэша. Если кэша нет, то делается запрос в базу и сохраняется в кэш.
Если нужно получить массив данных (что предпочтительней), то лучше делать так
$resources = [];
if ($c->prepare() && $c->stmt->execute()) {
    $resources = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}
foreach($resources as $resource){
    echo "<pre>".print_r($resource, true)."</pre>";
}В этом случае получишь то, что запрашивал. И памяти меньше кушает.            
                Понятно. Что-то это оказалось мне неожиданно :-(.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.