如何附加到CakePHP3 ResultSet?

时间:2016-05-20 01:27:31

标签: cakephp iterator cakephp-3.0

我有一个查询(一个Query对象):

$joblineitemsresults = $joblineitems->all();

它有结果(ResultSet对象):

gem "carrierwave", "~> 0.11.0"
gem 'carrierwave-aws', "~> 1.0.1"
gem "unf", "~> 0.1.4"

ResultSet对象是一个Iterable,foreach()循环将返回每个JobLineItem对象。

我只是想在$ joblineitemsresults中添加一个额外的结果 - 特别是我想在结果的末尾附加一个$ this-> JobLineItems-> newEntity(),这样当我随后对$ joblineitemsresults进行paginate并循环时在视图中,最后一页循环中的最后一个对象将是一个空白对象,其属性为new = true。

如何手动将额外结果附加到ResultSet对象?

1 个答案:

答案 0 :(得分:1)

试试这个

$joblineitems = $this->JobLineItems->find('all');
$joblineitemsresults = $joblineitems->all();

$joblineitemsresults = $joblineitemsresults ->append([$this->JobLineItems->newEntity()]);
debug($joblineitemsresults ->toList());

您可以看到manual来自参考

特别注意最后一段

  

从不同来源追加时,您可以期待一些密钥   两个集合都是一样的。例如,当附加两个   简单的数组。转换集合时,这可能会出现问题   使用toArray()到一个数组。如果你不想要一个值   集合根据其键覆盖前一个中的其他集合,   确保调用toList()以删除键和   保留所有价值观。

这就是我使用toList()代替toArray()的原因。如果您使用toArray(),您会看到新实体覆盖第一个实体。

当然,您也可以在数组中转换记录集,然后将新实体附加到数组

$joblineitemsresults = $joblineitems->toArray();
joblineitemsresults[] = $this->JobLineItems->newEntity();