У меня есть несколько связанных объектов в базе данных, которые мне нужно обновить из той же формы. Это простой адресный объект, связанный с контактным объектом VIA 1: 1.
Я могу поклясться, что когда я однажды извлекал объект, я устанавливал все заполнители в одном вызове $ object-> toArray (), но, похоже, это уже не так. [Я не уверен, что изменилось]
Вот что я делаю сейчас, и это работает:
$thisEntity = $this->modx->getObject('Entities', array('id' => $entity, 'token' => $token));
$entityData = $thisEntity->toArray();
// extra lines
$entityContacts = $thisEntity->EntityContact->toArray();
foreach($entityContacts as $key => $value){
$entityData[$key] = $value;
}
// extra lines$this->modx->setPlaceholders($entityData, 'fi.');
Я уверен, что в какой-то момент я не использовал лишние строки и заполнил форму, но не как.
Есть ли более простой способ заполнить массив заполнителей [$ entityData] из объекта Entities и объекта EntityContact за один шаг?
Вы близки.
Использование modUser в качестве примера для представления одного объекта:
$modx->toPlaceholders($modx->user->toArray(), 'user');
если вы извлекаете коллекцию информации, заполнители — плохая идея за пределами фрагмента.
Вместо:
$out='';
if ($collection){
foreach ($collection as $object){
if (is_object ($object) && $object instanceof someclass){
$out .= $modx->getchunk('chunkName', $object);
}
}
}
return $out;
или же
$modx->toPlaceholder($out, 'somename');
Я думаю, нет. Ты можешь использовать array_merge
для вашего примера или создать собственный запрос, который дает вам сводные данные.
Не могу привести рабочий пример, отсюда и недостаток моего опыта, но:
играть с описанными опциями toArray () Вот. (Ваши данные ленивы или связаны?)
выведите объект после первого вызова и опубликуйте здесь структуру, чтобы мы могли увидеть и выяснить, что происходит.
эта похожая тема на форумы modx может помочь тоже.
наконец, источник toArray () находится в github под blob -> master -> core -> xpdo -> om -> xpdoobject.class.php / не может опубликовать третью ссылку:) /