在Propel中使用toArray()时,是否可以删除带*RECURSION*的字段?

Leo*_*lis 7 php propel propel2

我正在使用Propel 2.我通过关系保湿对象,如下:

$return = OrderQuery::create()
    ->joinWith('Customer')
    ->joinWith('Status')
    ->find()
    ->toArray(TableMap::TYPE_PHPNAME, true, [], true);
Run Code Online (Sandbox Code Playgroud)

生成的数组看起来像这样:

{
  "Id": 1,
  "CustomerId": 1,
  "StatusId": 1,
  "Initiated": "2016-01-01T01:01:01+00:00",
  "Customer": {
    "Id": 1,
    "Forname": "Test",
    "Surname": "Smith",
    "Orders": [
      "*RECURSION*"
    ]
  }
  "Status": {
    "Id": 1,
    "Title": "title 1",
    "Priority": 1,
    "Orders": [
      "*RECURSION*"
    ]
  },
}
Run Code Online (Sandbox Code Playgroud)

我想删除值为的字段*RECURSION*.我尝试使用$alreadyDumpedObjects(第3个)参数,toArray()但似乎没有帮助.我也可以通过unset()调用来做某种形式的数组行走,但是我希望有更好的方法,也许是格式化程序或其他东西?

对于奖励积分,我非常想删除定义外键关系的列.例如,CustomerId会去,但Customer会留下来.

Leo*_*lis 1

看起来,答案似乎非常简单。

ArrayFormatter如果我使用这样的标准:

$return = OrderQuery::create()
    ->setFormatter('Propel\Runtime\Formatter\ArrayFormatter');
    ->joinWith('Customer')
    ->joinWith('Status')
    ->find()
    ->toArray();
Run Code Online (Sandbox Code Playgroud)

返回的是一个ArrayCollection,当toArray()被调用时,除了缺少递归字段之外,与我的原始输出完全相同。

请注意,当获取一个结果时,例如 with ->findPk(1),它将返回一个关联数组,因此您不应->toArray()显式使用。