Kni*_*dge 1 sql orm cakephp query-builder cakephp-3.x
我正在尝试从CakePHP3表ORM对象获得以下输出:
array(
[primarykey] => array (
'name' => 'users name',
'created_by' => 'created by data'
)
)
Run Code Online (Sandbox Code Playgroud)
我试过使用:
$users->find('list', [
'keyField' => 'id',
'valueField' => ['name', 'created_by']
])
->where(['is_active' => 1])
->toArray();
Run Code Online (Sandbox Code Playgroud)
但是,这只是将name和created_by列连接为一个字符串,并用';'分隔。例:
[1] =>“用户名;由数据创建”
如何在不获取数据的情况下手动进行解析?
我看过http://book.cakephp.org/3.0/zh-CN/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs,但除了列表以外,看不到其他示例一维。
谢谢,
我想说的是,使用list查找器是错误的方法。尽管您可以使它返回您要查找的内容,但我还是称其为hacky,因为您正在完全更改列表查找器最初打算返回的内容。
因此,抛开list查找器,禁用水合,并使用例如collections indexBy方法(查询对象是collections)
$users
->find()
->select(['id', 'name', 'created_by'])
->where(['is_active' => 1])
->hydrate(false)
->indexBy('id')
->toArray();
Run Code Online (Sandbox Code Playgroud)
这将返回类似
[
pk => [
'pk' => pk,
'name' => 'name',
'created_by' => 'created_by'
]
// ...
]
Run Code Online (Sandbox Code Playgroud)
如果您不想在结果中包含主键字段,请使用映射器将其删除
$users
->find()
->select(['id', 'name', 'created_by'])
->where(['is_active' => 1])
->hydrate(false)
->indexBy('id')
->map(
function ($row) {
unset($row['id']);
return $row;
}
)
->toArray();
Run Code Online (Sandbox Code Playgroud)
也可以看看
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |