1

我在数据库中有几个相关的对象,我需要从同一个表单进行更新。它是一个与联系人对象 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]?

4

3 回答 3

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');
于 2015-08-09T21:23:28.530 回答
-1

我猜不是。您可以使用array_merge您的示例或创建自定义查询,为您提供摘要数据。

于 2014-12-15T11:11:57.930 回答
-2

不能给你一个工作的例子,因此缺乏我的经验,但是:

  • 使用此处描述的 toArray() 选项。(您的数据是惰性的还是相关的?)

  • 在第一次调用后转储对象并在此处发布结构,以便我们查看并找出发生了什么。

  • modx 论坛上的这个类似主题也可能有所帮助。

  • 最后 toArray() 源位于 github 下的 blob -> master -> core -> xpdo -> om -> xpdoobject.class.php /cant post a third link :)/

于 2014-12-20T07:56:35.103 回答