Laravel 5.3雄辩的大规模更新

时间:2016-12-13 17:54:25

标签: php laravel

我在laravel 5.3中遇到过一个问题,也许你们遇到了类似的问题,并知道是什么原因造成的。

我正在加载前10个活动流消息(雄辩的模型活动,其中包含"读取"列可以是0或1并显示用户是否已阅读它)以及是否有超过10个活动,然后在页面底部有一个加载更多按钮。当点击加载更多按钮时,我通过ajax调用从后端获取10条消息。

问题在于:

    $activities = Activity::where( 'to_user_id', Auth::id() )
                          ->latest()
                          ->offset( $offset )
                          ->limit( 10 )
                          ->get();


    Activity::where( 'to_user_id', Auth::id() )
                       ->latest()
                       ->offset( $offset )
                       ->limit( 10 )
                       ->update( [ 'read' => 1 ] );

我在第一次加载和ajax加载时运行上面的代码。第一次加载通过routes / web.php发生,它完美地工作并将最初的10个活动标记为read ..

Ajax调用是通过ActivityController文件处理的,但由于某种原因,输出是正确的但是" read"列未更新。我申请了临时修复:

    foreach($activities as $activity) {
        $activity->read = 1;
        $activity->save();
    }

但我仍然需要弄清楚出了什么问题:

    Activity::where( 'to_user_id', Auth::id() )
                       ->latest()
                       ->offset( $offset )
                       ->limit( 10 )
                       ->update( [ 'read' => 1 ] );

1 个答案:

答案 0 :(得分:0)

因为您的第一个WEB请求正在更新->get()之后的所有内容。用Eloquent进行那种大规模更新是不可能的。