/** * Dynamic finder that loads all users for a thread without me * * @param \Cake\ORM\Query $query the original query to append to * @param array $users the list of users to be ignored * @return \Cake\ORM\Query The amended query */ public function findReadStatus(Query $query, array $users) { $query->contain(['Messages' => function ($q) use($users) { return $q->find('readStatus', $users); }]); return $query->map(function ($thread) { $opened = false; foreach ($thread['messages'] as $message) { if ($message['message_read_statuses'][0]['opened']) { $opened = true; break; } } $thread['opened'] = $opened; return $thread; }); }