#cakephp
#cakephp
Вопрос:
Я использую CakePHP Collections
для итерации записей. Я хочу создать новый элемент в каждом вызываемом balance_history
, но, похоже, я не могу его добавить. Я не получаю никакой ошибки.
$journalEntries = $this->JournalEntries->find()
->where(['journal_id' => $journal_id])
->contain('Strategies.StrategiesConditions', 'JournalEntriesStrategyConditions')
->enableHydration(false)
->toList();
$collection = new Collection($journalEntries);
$closeDateSorted = $collection->sortBy('close_date_time', SORT_ASC);
$balance = $journal->starting_balance;
$closeDateSorted = $closeDateSorted->each(function ($jEntry) use (amp;$balance) {
$balance = $jEntry['profit'];
//$jEntry = [ "history_balance" => $balance ];
$jEntry['history_balance'] = $balance;
});
debug($closeDateSorted->toArray());
[
(int) 2 => [
'id' => (int) 23,
'journal_id' => (int) 1,
'ticket_number' => 'testbalance2',
'entry_date_time' => object(CakeI18nFrozenTime) {
'time' => '2020-09-03 00:08:22.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'entry_price' => null,
'strategy_id' => null,
'timeframe' => '',
'created' => object(CakeI18nFrozenTime) {
'time' => '2020-08-27 20:54:54.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'modified' => object(CakeI18nFrozenTime) {
'time' => '2020-08-27 20:54:54.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'strategy' => null
],
(int) 0 => [
'id' => (int) 21,
'journal_id' => (int) 1,
'ticket_number' => 'sdfsdfsdf 2',
'entry_date_time' => object(CakeI18nFrozenTime) {
'time' => '2020-09-05 07:49:04.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'entry_price' => null,
'strategy_id' => null,
'timeframe' => '',
'created' => object(CakeI18nFrozenTime) {
'time' => '2020-08-26 22:33:28.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'modified' => object(CakeI18nFrozenTime) {
'time' => '2020-09-21 20:35:12.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
}
],
(int) 4 => [
'id' => (int) 32,
'journal_id' => (int) 1,
'ticket_number' => 'sdfsdf',
'entry_date_time' => object(CakeI18nFrozenTime) {
'time' => '2020-10-19 20:28:46.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'entry_price' => null,
'strategy_id' => null,
'timeframe' => '',
'created' => object(CakeI18nFrozenTime) {
'time' => '2020-09-19 20:29:33.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'modified' => object(CakeI18nFrozenTime) {
'time' => '2020-09-19 20:29:33.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'strategy' => null
],
(int) 1 => [
'id' => (int) 22,
'journal_id' => (int) 1,
'ticket_number' => 'testbalance',
'entry_date_time' => object(CakeI18nFrozenTime) {
'time' => '2020-09-03 00:08:13.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'entry_price' => null,
'strategy_id' => null,
'timeframe' => '',
'created' => object(CakeI18nFrozenTime) {
'time' => '2020-08-27 20:49:41.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'modified' => object(CakeI18nFrozenTime) {
'time' => '2020-08-27 20:49:41.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'strategy' => null
],
(int) 3 => [
'id' => (int) 31,
'journal_id' => (int) 1,
'ticket_number' => 'cvbcvb',
'entry_date_time' => object(CakeI18nFrozenTime) {
'time' => '2020-09-18 21:06:12.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'entry_price' => null,
'strategy_id' => null,
'timeframe' => '',
'created' => object(CakeI18nFrozenTime) {
'time' => '2020-09-19 20:09:51.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'modified' => object(CakeI18nFrozenTime) {
'time' => '2020-09-19 20:09:51.000000 00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'strategy' => null
]
]
Комментарии:
1. Итак, каков результат отладки?
2. извините, нужно было добавить раньше
3. Похоже, что вещи в вашей коллекции — это массивы, которые не будут передаваться по ссылке на функцию обратного вызова. Есть ли шанс, что вы можете сделать их объектами или ArrayObjects вместо этого?
4. Спасибо @GregSchmidt. Я удалил
->enableHydration(false)
, и это не работает.