Cakephp3 ORM ID as Key 多维
Cakephp3 ORM ID as Key multi-dimentional
我正在尝试从 CakePHP3 Table ORM 对象获取以下输出:
array(
[primarykey] => array (
'name' => 'users name',
'created_by' => 'created by data'
)
)
我试过使用:
$users->find('list', [
'keyField' => 'id',
'valueField' => ['name', 'created_by']
])
->where(['is_active' => 1])
->toArray();
然而,这只是将名称和 created_by 列连接成一个由“;”分隔的字符串。示例:
[1]=> "users name;created by data"
如何在获取数据时不手动解析?
我看过 http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs 但除了单维列表之外看不到其他示例。
谢谢,
我会说,为此使用 list
查找器是完全错误的方法。虽然您可以 return 找到您要查找的内容,但我认为这有点骇人听闻,因为您完全改变了列表查找器最初打算 return.
的内容
因此,放弃 list
查找器,禁用水合作用,并使用例如集合 indexBy
方法(查询对象是集合)
$users
->find()
->select(['id', 'name', 'created_by'])
->where(['is_active' => 1])
->hydrate(false)
->indexBy('id')
->toArray();
这会return类似于
[
pk => [
'pk' => pk,
'name' => 'name',
'created_by' => 'created_by'
]
// ...
]
如果您不想在结果中包含主键字段,请使用映射器将其删除
$users
->find()
->select(['id', 'name', 'created_by'])
->where(['is_active' => 1])
->hydrate(false)
->indexBy('id')
->map(
function ($row) {
unset($row['id']);
return $row;
}
)
->toArray();
另见
我正在尝试从 CakePHP3 Table ORM 对象获取以下输出:
array(
[primarykey] => array (
'name' => 'users name',
'created_by' => 'created by data'
)
)
我试过使用:
$users->find('list', [
'keyField' => 'id',
'valueField' => ['name', 'created_by']
])
->where(['is_active' => 1])
->toArray();
然而,这只是将名称和 created_by 列连接成一个由“;”分隔的字符串。示例:
[1]=> "users name;created by data"
如何在获取数据时不手动解析?
我看过 http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs 但除了单维列表之外看不到其他示例。
谢谢,
我会说,为此使用 list
查找器是完全错误的方法。虽然您可以 return 找到您要查找的内容,但我认为这有点骇人听闻,因为您完全改变了列表查找器最初打算 return.
因此,放弃 list
查找器,禁用水合作用,并使用例如集合 indexBy
方法(查询对象是集合)
$users
->find()
->select(['id', 'name', 'created_by'])
->where(['is_active' => 1])
->hydrate(false)
->indexBy('id')
->toArray();
这会return类似于
[
pk => [
'pk' => pk,
'name' => 'name',
'created_by' => 'created_by'
]
// ...
]
如果您不想在结果中包含主键字段,请使用映射器将其删除
$users
->find()
->select(['id', 'name', 'created_by'])
->where(['is_active' => 1])
->hydrate(false)
->indexBy('id')
->map(
function ($row) {
unset($row['id']);
return $row;
}
)
->toArray();
另见