Laravel中缓存的分页

时间:2017-02-01 10:07:05

标签: laravel laravel-5.3

任何人都可以帮助我吗?我使用redis缓存。但是当我使用分页时,我在每个页面上看到相同的结果。我该如何解决?感谢。

2 个答案:

答案 0 :(得分:5)

您应该使用当前页面的密钥缓存每页的结果。

<?php 
$my_tabindex=1;

foreach($marks as $student_mark):
<tr>
    <td  class="span3">
        <?php 
            //this is derived from another query that returns information      over students of a selected class
            echo $row['student_name'];  
        ?>
    </td>
    <td>
          <input type="number" step = "0.01" value="<?php echo $student_mark['mark_obtained'];?>" name="mark_obtained" tabindex="<?php echo $my_tabindex+1; ?>" />
    </td>
<td>
    <input type="hidden" name="operation" value="update" />
    <button type="submit" class="btn btn-normal btn-gray"> Update</button>
</td>
</tr>
?>
<?php 
endforeach;
?>  

答案 1 :(得分:1)

这个缓存和清除分页缓存的解决方案。

如何缓存:

$page = request()->get('page', 1);
$limit = request()->get('limit', 10);

$users = Cache::remember('admin' . $page, 10, function() use ($limit){
    return DB::table('users')->paginate($limit);
});

您可以使用循环来检查前缀并像这样删除它们。

public static function forgetCaches($prefix)
{
    // Increase loop if you need, the loop will stop when key not found
    for ($i=1; $i < 1000; $i++) {
        $key = $prefix . $i;
        if (Cache::has($key)) {
            Cache::forget($key);
        } else {
            break;
        }
    }
}

清除缓存:

// Clear caches:
forgetCaches('admin');