【问题标题】:Laravel chunk() mistaken with array_chunk?Laravel chunk() 与 array_chunk 错误?
【发布时间】:2015-06-30 16:10:54
【问题描述】:

我正在使用 Laravel 5 进行本地项目。我正在尝试获取可能(或成为)大量数据的数据。我正在这样做

    $tickets = Ticket::getResolvedTicketsBetween($start,$end)->chunk(200, function($chunkOfTickets){
    foreach ($chunkOfTickets as $ticket) {
        echo $ticket->id;
    }
});

问题是我收到了错误

array_chunk() expects parameter 3 to be boolean, object given

我做错了什么?有人可以帮助我吗,我正在相应地关注文档...我想...

【问题讨论】:

  • getResolvedTicketsBetween 方法返回了什么?收藏?查询?
  • 该函数实际上是一行。 return Ticket::where('created_at', '>=', $start)->where('created_at', 'where('state','=','Resolved') ->get();

标签: php laravel-5 chunks


【解决方案1】:

我刚刚搜索了 Laravel 框架,唯一的用法是在 Collection 类中,它有一个 chunk() 函数,不要与查询构建器类的 chunk() 函数混淆。

如果getResolvedTicketsBetween() 调用get(),那么它最终会返回一个集合。如果您希望能够继续构建查询,请删除对 get() 的调用。

我对您的代码外观的猜测:

function getResolvedTicketsBetween($start, $end) {

    // Dont do this
    // return Ticket::where('created_at', '>=', $start)->where('created_at', '<=', $end)->where('state','=','Resolved')->get()

    // Do this instead (returns Query Builder instance)
    return Ticket::where('created_at', '>=', $start)->where('created_at', '<=', $end)->where('state','=','Resolved');
}

【讨论】:

  • 啊哈!好的我明白了。这是get()。有了这个错误,我想我永远不会自己解决这个问题。非常感谢。
  • 没问题。每当我遇到 Laravel 问题时,我都会深入研究框架代码,看看发生了什么。它有很大帮助。 vendor/laravel/framework/src 是你的朋友。
  • 调试中另一个有用的技巧是使用显示一切的库 - 我喜欢Kint。使用\Kint::dump($object) 将一个对象转储到您的浏览器,您可以浏览关于该对象的大量信息。我经常使用它来查看我从框架中返回了哪些类。
  • @Thaenor 不,我认为您不能使用$this 来引用循环中的对象。在 Javascript 中,由于作用域的方式而起作用,但在 PHP 中,它将是对您的代码所在的类实例的引用。如果不是类实例或静态方法,那么$this 将根本不起作用。
  • @Thenanor 不,它不平行。它有一个while循环并抓取记录块并将每个块传递给您的回调。如果你 dd($ticket); 它是你的 Ticket 模型的一个实例吗? (它应该是)。你可以参考这里的代码:github.com/laravel/framework/blob/5.1/src/Illuminate/Database/…
猜你喜欢
  • 2020-07-20
  • 2012-05-22
  • 2019-07-30
  • 2019-05-11
  • 2018-01-09
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多