Laravel查询构建器:采用和限制方法

时间:2018-09-23 17:07:21

标签: php laravel laravel-5 laravel-query-builder

我不了解这些方法的工作方式,我试图将最后的记录插入到数据库中,为此,我需要一个查询生成器,因此我向y咨询了以下内容:

 $costo = Costo_promedio::where('producto_nombre_id',$id_prod->id)->latest()->take(1);

问题是我仍然要插入所有记录,在这些方法takelimit中,我发送了我想获取的记录,我的问题是。为什么会这样?

不,我不想使用first()或get()方法,这些方法在数据表中进行服务器端处理时不起作用

3 个答案:

答案 0 :(得分:1)

first()未返回Collection。它返回一个Model实例。也许您不清楚Collection与Model实例。

$costo = Costo_promedio::where('producto_nombre_id',$id_prod->id)->latest()->first();

替代:

$costo = Costo_promedio::where('producto_nombre_id',$id_prod->id)->latest()->get();

// $costo[0]

答案 1 :(得分:1)

take(1)limit(1)仅将limit 1添加到builder中的查询中。您需要调用get()来获取结果,它将返回一个Collection,并且可以通过在其上调用first()来获取其唯一元素。

$costo = Costo_promedio::where('producto_nombre_id',$id_prod->id)->latest()->take(1)->get()->first();

或者您也可以将take(1)->get()->first()替换为first()

$costo = Costo_promedio::where('producto_nombre_id',$id_prod->id)->latest()->first()

first()将添加limit 1并获取结果,并返回其中唯一的项

答案 2 :(得分:0)

尝试一下

$costo = Costo_promedio::orderBy('created_at','desc')->take(3)->get();

假设您的时间戳名为 created_at ,它将从数据库中获取最后三条记录。