这是我的代码
$all = $this->find()
->select(['ProductCircles.id', 'ProductCircles.type', 'ProductCircles.name'])
->order(['ProductCircles.type'])
->all()
->toArray();
Log::write('error', $all);
$all = Hash::combine($all, '{n}.ProductCircles.id', '{n}.ProductCircles.name', '{n}.ProductCircles.type');
$all
是一个ProductCircle实体数组。
但是,Hash组合无法像我预期的那样对数据进行操作。
请告知。
预计 $all
是一个ProductCircle实体数组:
2015-03-15 08:04:36 Error: Array
(
[0] => App\Model\Entity\ProductCircle Object
(
[_accessible:protected] => Array
(
[name] => 1
[type] => 1
[product_count] => 1
[products_in_circles] => 1
)
[_properties:protected] => Array
(
[id] => 27
[type] => MATERIAL
[name] => Wood
)
[_original:protected] => Array
(
)
[_hidden:protected] => Array
(
)
[_virtual:protected] => Array
(
)
[_className:protected] => App\Model\Entity\ProductCircle
[_dirty:protected] => Array
(
)
[_new:protected] =>
[_errors:protected] => Array
(
)
[_registryAlias:protected] => ProductCircles
)
这是我的预期。
我想用Hash :: combine做的是得到一个像这样的数组:
$result:
[
[MATERIAL] => [
[27] => [
Wood
]
]
答案 0 :(得分:1)
不要使用Hash,而是使用查询对象中内置的集合方法:
$combined = $this->find()
->select(['ProductCircles.id', 'ProductCircles.type', 'ProductCircles.name'])
->order(['ProductCircles.type'])
->combine('id', 'name', 'type')
->toArray();
答案 1 :(得分:0)
扩展 José 的回答(并使用 extract()
,因为这是我需要的):
$query = $this->MyTable->find('all', [
'contain' => [
'ProductCircles',
],
// ...
]);
return $query->all()->extract('ProductCircles.name');
更多信息:book.cakephp.org/3/en/core-libraries/collections.html#Cake\Collection\Collection::extract