从laravel集合中获取一系列模型

时间:2016-08-04 18:24:40

标签: php arrays laravel

给出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循环提取它,但那很难看。有什么好办法吗?

2 个答案:

答案 0 :(得分:4)

Collection只是标准数组的包装。要获得该标准数组,请调用all()上的Collection方法。

// Collection of Item models
$itemsCollection = Item::all();

// standard array of Item models
$itemsArray = $itemsCollection->all();

答案 1 :(得分:-1)

请勿尝试强制转换为数组,而是保持Collection完整无缺,并使用mapeach之类的高阶函数来执行您需要的操作。

例如:

$multiplied = $collection->map(function ($item, $key) {
    return $item * 2;
});

$multiplied->all();

您没有指定实际需要对数据执行的操作,因此这只是一个松散的示例from the docs

您无法转换为数组并保持模型完好无损,无法正常工作。