我有一个表,其中列出了用户。我们有字段id,rating,active。所以一个例子可能是:
id | rating | active | group (computed)
1 | 12 | 1 |
2 | 1 | 0 |
3 | 25 | 1 |
4 | 20 | 1 |
5 | 21 | 0 |
6 | 12 | 1 |
...
我的目标是使用其他计算组字段扩展字段。 我期待3组用户。
这很简单,活动字段中“1”的用户将分配两个goups。
所以最终的计算表应该看起来像
id | rating | active | group (computed)
1 | 12 | 1 | 1
2 | 1 | 0 | -
3 | 25 | 1 | 2
4 | 20 | 1 | 2
5 | 21 | 0 | -
6 | 12 | 1 | 1
...
所以我有一个工作代码,但我认为这必须编码得更好,但我不知道如何。
控制器中的代码:
$this->paginate = [
'contain' => ['ExampleTableA', 'ExampleTableB']
];
$query = $this->Users->find('all')->order(['Users.first_name'=>'ASC', 'Users.last_name'=>'ASC']);
// Extending Group
$query->formatResults(function (\Cake\Datasource\ResultSetInterface $results) {
return $results->map(function ($row) {
if($row['active'] != 1){
$row['group'] = '-';
}
else{
$query_active = $this->UserParticipants->find('list', array('fields' => array('Users.id')))
->where(['Users.active' => 1])
->order(['Users.rating' => 'ASC','Users.id' => 'ASC']);
$array = $query_active->toList();
$length = $query_active->count();
$firsthalf = array_slice($array, 0, $length / 2);
$secondhalf = array_slice($array, $length / 2);
if(in_array($row['id'], $firsthalf)){
$row['group'] = 1;
}
if(in_array($row['id'], $secondhalf)){
$row['group'] = 2;
}
}
return $row;
});
});
$userParticipants = $this->paginate($query);
我的代码的问题是,$query_active
查找程序将执行与用户一样多的执行。我不能在地图功能中添加任何选项。
此示例代码来自此处:Adding Calculated Fields
你有任何改进或暗示吗?
答案 0 :(得分:1)
我不知道cakephp。但我认为您应该能够将ImageReader
和$firsthalf
的计算移出匿名函数。
$secondhalf