我知道如何通过查看this在CakePHP 3.x中编写自定义查找程序。
我也知道如何获得一个"列表"使用find('list')
然后通过this
toArray
我想要做的是编写一个自定义查找程序,以确保我可以对自定义查找程序的结果使用toArray
,并在使用find('list')
时返回类似的数组。
我的自定义查找程序方法名称为findListForDynamicViews
。
因此我想要
$query = $circlesTable->find('listForDynamicViews');
$data = $query->toArray(); // this gives me an associative array similar to the one we get from find('list')
如果我知道如何使用where()
进行查询,如何编写自定义查找程序?
答案 0 :(得分:1)
这可以使用结果格式化程序,list
查找程序也是如此:
剥离到基本要素,您只需按键和值字段组合,这些字段通常是主键和显示字段:
$query->formatResults(function(\Cake\Datasource\ResultSetInterface $results) {
return $results->combine('key_field', 'value_field');
});
答案 1 :(得分:1)
也许这个简短的代码适用于您的情况:
$query = $circlesTable->find('list')->find('listForDynamicViews');
哟根本不需要修改自定义查找程序。
答案 2 :(得分:0)
我设法使用这样的自定义查找器:
// contained in my PropertiesTable.php
public function findCityList(Query $query) {
return $query->find('list', ['keyField' => 'id', 'valueField' =>'city'])
->select(['city'])->distinct(['city']);
}
对find()的列表调用已经返回一个数组,所以你不需要在它之后调用toArray()。
// the retuning array
$citys = [
'7' => 'Olímpia',
'10' => 'São José do Rio Preto',
'17' => 'Guarujá'
];
希望它有所帮助。