我不了解这些方法的工作方式,我试图将最后的记录插入到数据库中,为此,我需要一个查询生成器,因此我向y咨询了以下内容:
$costo = Costo_promedio::where('producto_nombre_id',$id_prod->id)->latest()->take(1);
问题是我仍然要插入所有记录,在这些方法take
或limit
中,我发送了我想获取的记录,我的问题是。为什么会这样?
不,我不想使用first()或get()方法,这些方法在数据表中进行服务器端处理时不起作用
答案 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 ,它将从数据库中获取最后三条记录。