Разница между newQuery, command('update'), set и getOblect, set

Наткнулся на такую конструкцию:
$c = $modx->newQuery('Objekt');
$c->command('update');
$c->set(array(
        'name'  => $name
));
$c->where(array(
        'id'    => $id,    
));
$c->prepare();
$c->stmt->execute();
Раньше всегда использовал
$obj = $modx->getObject('Object');
$obj->set('prop', 'value');
$obj->save();
Подскажите, в чём разница? Предполагаю, что в скорости. Можно ли первым способом создавать ресурсы?
Лёша
26 марта 2022, 09:56
modx.pro
358
0

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

Артур Шевченко
26 марта 2022, 23:59
+1
я глубоко не копался, но поделюсь своим пониманием. newQuery формирует чистый sql запрос, а newObject использует для работы с базой данных объектную модель. Оба способа позволяют создавать ресурсы, но стоит иметь в виду, что создание ресурса это не просто добавление новой записи в БД, а ещё ряд действий, например, генерация псевдонима, url.
    Николай Савин
    30 марта 2022, 16:48
    0
    newQuery это конструктор SQL запросов. Он сам по себе в базу не ходит.
    Запрос в базу делает строка
    $c->stmt->execute();
    Вот ее нужно сравнивать с get и set

    Разница в приведении к типу данных.
    Перед сохранением обязательно происходит конвертация в указанный в карте объекта тип.
    Строки, числа и булевы значения это все понятно.
    В дело вступают алгоритмы посложнее когда, тип данных дата. json и другие.

    Тот же процесс происходит и в обратную сторону.
    Обычный SQL всегда вернет только строки. А вот такой код приведет все данные к нужному типу данных.
    $obj->get()
    К примеру json массив будет аккуратненько распарсен в массив, число приведено к числу, метка времени превратится в читаемую дату и так далее.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2