Материал для тех, что знает что такое map-файлы и с чем их едят. Небольшая заметочка.
В мап-файлах описываются колонки таблицы/объекта с указанием типа данных в БД и в PHP (типа как воспринимать на стороне PHP и в каком виде сохранять в БД). И здесь я хотел бы отдельно рассмотреть php-типы array и json.
Если указать php-тип array, то свойству объекта передаем массив, а в БД будет писаться сериализованная строка, типа a:1:{s:6:«sdfsdf»;s:6:«sdfsdf»;}
Вот часть мап-файла:
'entries' =>
array (
'dbtype' => 'text',
'phptype' => 'array',
'null' => false,
),
А вот исполняемый код:
if($o = $modx->newObject('DropboxCursor', array(
"entries" => array('sdfsdf' => "sdfsdf"),
))){
$o->save();
}
На мой взгляд здесь самое неприятное это то, что передавать ему можно только массив (Хотя конечно можно задать его напрямую $o->entries = 'a:1:{s:6:«sdfsdf»;s:6:«sdfsdf»;}';, но все равно мне никогда не нравилось работать с сериаллизованными строками.).
А вот если указать phptype json, тогда объекту можно передавать как массив, так и JSON-строку. В БД всегда будет записана JSON-строка. То есть можно и так:
$o->set('entries', array('sdfsdf' => "sdfsdf"));
и так:
$o->set('entries', '{"sdfsdf":"sdfsdf"}');
и так:
$o->entries = '{"sdfsdf":"sdfsdf"}';
По-моему значительный такой плюс :) Можно совсем не заморачиваться с типом данных.
Хорошая заметка. Только я бы добавил, что при операторе
$x=$o->entries;
мы получим сырые данные, в том виде, как они хранятся в базе. Чтобы получить массив, нужен оператор
$x=$o->get('entries');
Да, справедливое замечание.