来自数据库列的随机值,但在laravel中只有一次

yxyvkwin  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(346)

我的数据库查询从数据库返回随机行。当用户刷新页面时,页面加载并返回这个随机字符串有没有办法不改变字符串?
这是我的控制器

public function view() {

    $view = View::orderByRaw("RAND()")->limit('1')->get();          

    return View::make('site.view', [
            'view' => $view
        ]);
}

在我的刀刃上

@foreach($view as $rand) 
  {{ Form::open() }}
      {{ $rand['my_view'] }} 

       // bunch of form fealds
       <button type="submit" class="btn btn-primary">Submit</button>
  {{ Form::clode() }}
@endforeach

所以这里用户得到了随机字符串,需要填写表单并添加这个字符串。然后我将所有信息保存在数据库中。一切都完美地保存在数据库中。问题是,用户提交表单后可以刷新多个时间表,当看到另一个随机字符串时可能会感到困惑。。。

x9ybnkn6

x9ybnkn61#

选项#1-保存从 View::make 返回会话并返回:

public function view() {
    $rand_view = Session::get('rand_view');
    if (!$rand_view) {
        $view = View::orderByRaw("RAND()")->limit('1')->get();

        $rand_view = View::make('site.view', [
            'view' => $view
        ]);

        Session::put('rand_view', $rand_view);
    }
    return $rand_view;
}

选项#2-对于特定用户-始终生成相同的“随机”:

public function view() {
    // To make sure we generate the same RAND() we generate a random seed for each user and we save that seed in the session for that user.
    $rand_seed = Session::get('rand_seed');
    if (!$rand_seed) {
        $rand_seed = mt_rand();
        Session::put('rand_seed', $rand_seed);
    };

    $view = View::orderByRaw("RAND({$rand_seed})")->limit('1')->get();          

    return View::make('site.view', [
        'view' => $view
    ]);
}

更新

经过一些调试后,选项1似乎不起作用,因为 View::make 返回无法序列化的对象。如果您需要此解决方案,请使用选项2

xxb16uws

xxb16uws2#

只需将随机数据保存到会话变量中,并显示会话变量(如果存在)的内容。只是不要忘记在不再需要变量时取消设置它。

相关问题