【问题标题】:Laravel Query builder: Take and limit methodsLaravel 查询构建器:采取和限制方法
【发布时间】:2019-02-18 16:36:59
【问题描述】:

我不明白这些方法是如何工作的,我正在尝试将最后一条记录插入到我的数据库中,为此,我需要一个查询构建器,所以我让你咨询了这样的东西:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    first() 不是返回集合。它返回一个模型实例。可能你对 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]
    

    【讨论】:

    • 它返回一个我不需要的集合:(,我正在使用数据表,我需要一个查询构建器结构
    • $costo[0] 是收藏吗?
    • 顺便说一句first()不返回集合..它返回模型实例..也许你不清楚集合与模型实例..@Christian
    • 是的,对不起,我混淆了 get() 和 first() 方法,问题是当您对数据表进行服务器端处理时,这些方法不是必需的,它们不会返回正确的数据结构跨度>
    【解决方案2】:

    take(1)limit(1) 只是将 limit 1 添加到构建器中的查询中。你需要调用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 并获取结果并返回唯一的项目

    【讨论】:

      【解决方案3】:

      试试这个

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-19
        • 2015-08-28
        • 2017-04-13
        • 2019-06-19
        • 2016-05-02
        • 2020-01-05
        • 2013-01-30
        • 2017-06-29
        • 1970-01-01
        相关资源
        最近更新 更多