我在数据库中有几个相关对象,我需要从同一个表单更新。它是一个与联系对象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.');
我确信在某一点上我没有使用额外的行并填写了表单,但不是如何。
是否有更简单的方法可以在一步中从Entities对象和EntityContact对象填充占位符数组[$ entityData]?
答案 0 :(得分:1)
你很亲密。
使用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');
答案 1 :(得分:-1)
我猜不是。您可以使用array_merge
作为示例,也可以创建自定义查询,为您提供摘要数据。
答案 2 :(得分:-2)
不能给你一个工作的例子因此缺乏我的经验,但是:
使用描述here的toArray()选项。 (您的数据是懒惰的还是相关的?)
在第一次调用后转储对象并在此处发布结构,以便我们可以看到并找出发生的情况。
modx forums上的这个类似帖子也可能会有所帮助。
最后,toArray()源位于blob下的github - >主人 - >核心 - > xpdo - > om - > xpdoobject.class.php / cant发布第三个链接:)/