如何在laravel eloquent返回的数组中使用next()或current()?

时间:2017-03-24 16:18:45

标签: php laravel eloquent

我正在建立预订系统,我正在编程递归的功能。因此,我需要在PHP中使用php函数next()和current()。问题是,如果我有所有记录的数组,它只是不起作用。它适用于其他所有数组,所以我的猜测是内部指针没有设置,但是reset()函数也没有帮助。

问题是当我在laravel中调用eloquent模型以从表中获取所有结果时:

$posts = Post::all();

然后我回复或返回(无关紧要)当前($ posts),我得到相同的结果,好像我返回$ posts(整个数组)

当我试着这样说时:

next($posts);
return current($posts);

或者:

prev($posts);
return current($posts);

我有一个错误:

The Response content must be a string or object implementing __toString(), "boolean" given.

任何人都可以帮我解决这个问题吗?如果我创建相同的数组并返回它雄辩的数组,这个新创建的数组是相同的,但如果我在雄辩的数据上使用current,它就不起作用。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

$posts = Post::all(); // returns a collection

你想要

$posts = Post::all()->toArray();

然后,您可以致电current($posts)next($posts)prev($posts)end($posts)

但是,由于您有一个集合,您可以始终使用laravel的集合方法,例如firstlasteachfiltermap,{ {1}}等等。

https://laravel.com/docs/5.4/eloquent-collections#available-methods

答案 1 :(得分:0)

我使用以下代码:

$models = User::whereIn('name',$names)->get()->getIterator();

while ( $record = $models->current() )
{
    ...
    $models->next();
}

答案 2 :(得分:-1)

要检索第一行:import pandas as pd ## columns widths of the fixed width format fwidths = [12, 8, 8, 12, 4, 8, 8, 5] ## read fixed width format into pandas data frame df = pd.read_fwf("your_file.txt", widths=fwidths, header=1, names=["GSENumber", "Species", "Platform", "Sample", "Age", "Tissue", "Sex", "Count"]) ## drop "Sample" column as it is not needed in the output df = df.drop("Sample", axis=1) ## group by GSENumber grouped = df.groupby(df.GSENumber) ## aggregate columns for each group aggregated = grouped.agg({'Species': lambda x: list(x.unique()), 'Platform': lambda x: list(x.unique()), 'Age': lambda x: "%d-%d" % (min(x), max(x)), 'Tissue': lambda x: list(x.unique()), 'Sex': lambda x: "Mixed" if x.nunique() > 1 else list(x.unique()), 'Count': lambda x: list(x.unique())}) print aggregated

将集合转换为数组:Post::first()

Post::all()->toArray()