给出Models
的{{1}} Arrayable
,->toArray()
,如何获取这些对象的数组?
如果我在集合上调用array:1 [▼
"\x00*\x00items" => array:1 [▼
"temp" => HistorySeries {#374 ▼
#table: "history_series_hse"
#primaryKey: "id_hse"
#connection: "mysql"
+timestamps: false
<...snip...>
}
]
]
,它会给我一个嵌套的关联数组,从而破坏模型。
如果我把它投射到数组中,我会得到这个非常奇怪的东西:
$reflection = new ReflectionClass($coll);
$property = $reflection->getProperty('items');
$property->setAccessible(true);
$array = $property->getValue($coll);
然后是这个,但我并不喜欢它(它有效):
# put the codes into a matrix for faster processing
myMat <- sapply(non_fall2_flag[, diag_codes],
function(i) as.integer(gsub("[^0-9]+", "", i)))
# get indicators for both codes
check_1 <- as.integer(rowSums(myMat == 99559) > 0)
check_2 <- as.integer(rowSums(myMat == 99550) > 0)
# fill in variable
non_fall2_flag$abuse <-
c("", "other abuse", "unspec.")[pmax(1, 2*check_2, 3*check_1)]
或者我可以使用foreach循环提取它,但那很难看。有什么好办法吗?
答案 0 :(得分:4)
Collection
只是标准数组的包装。要获得该标准数组,请调用all()
上的Collection
方法。
// Collection of Item models
$itemsCollection = Item::all();
// standard array of Item models
$itemsArray = $itemsCollection->all();
答案 1 :(得分:-1)
请勿尝试强制转换为数组,而是保持Collection完整无缺,并使用map
或each
之类的高阶函数来执行您需要的操作。
例如:
$multiplied = $collection->map(function ($item, $key) {
return $item * 2;
});
$multiplied->all();
您没有指定实际需要对数据执行的操作,因此这只是一个松散的示例from the docs。
您无法转换为数组并保持模型完好无损,无法正常工作。