Laravel Eloquent检索第一个元素并保持查询结果完好无损?

Bag*_*yer 6 sql eloquent laravel-4

请看下面的代码:

$msgs = Message::where(function($query) use ($start,$end){

    $query->whereBetween('created_at', array($start, $end));

})->orderBy('created_at', 'DESC');

$first = $msgs->first()->created_at;
$ids = $msgs->lists('id');
Run Code Online (Sandbox Code Playgroud)

我想要做的是获取查询结果集的最新日期,并同时从结果中获取所有ID.但代码不起作用,因为$ msgs由$ msgs-> first()函数更改.我想知道是否有办法让我获得查询结果的第一个元素而不影响整个结果集?谢谢

Jar*_*zyk 11

$first = $msgs->first(); // this does ->take(1) under the hood
Run Code Online (Sandbox Code Playgroud)

现在你的建造者有limit = 1条款.

所以基本上你需要这个:

// also you can use pluck:
$first = $msgs->pluck('created_at'); // returns first row`s single field
//then:
$ids = $msgs->take(9999)->lists('id'); // some high value depending on your data
Run Code Online (Sandbox Code Playgroud)

您的解决方案不是最好的,因为它加载所有行并创建它们的对象,而您需要的只是ID列表.

您还可以使用first()Collection的方法来获取其第一个项目,而不是该foreach循环:

$messages = $msgs->get();
$first = $msgs->first()->created_at;
Run Code Online (Sandbox Code Playgroud)