查找数据库中是否存在用户ID并显示按钮(如果它不是

时间:2015-08-14 11:09:17

标签: php laravel laravel-5

我正在寻找关于解决if语句的最佳方法的一些建议。

我有一个注册类型的网站,内置Laravel 5.1,我希望新用户填写调查问卷。

我想要这样做的方法是显示一个按钮,让他们点击我的主页,不过我只想在没有填写的情况下显示它。

我一直在四处寻找如何做到这一点,但是我无法找到合适的解决方案。

我最初这样做的方法是在routes.php文件中检索表的所有结果,并将其传递给视图,如下所示:

Route::get('/', function () {
    $data = Questionnaire::all();
    return View::make('home')->with('data', $data);
});

这会返回数组中表中的所有数据,然后我尝试使用foreach遍历这些数据,将数组中的memberid字段与Auth::user->id()进行匹配。如果未找到匹配项,则将按钮放在页面上。但是,这将始终显示按钮,因为它总是会找到一个不匹配的集合,即使它稍后会找到匹配项。

在一天结束时,我想比较调查表中的memberid值与登录成员的id,如果他们不在问卷表中,则显示按钮。但是,主页可以在他们登录之前访问,因此只需使用路径文件中的where子句并不总是有效:

$data = Questionnaire::where("memberid", "=", Auth::user->id());

如果他们没有登录就会失败。

有关如何解决此问题的任何解决方案?

3 个答案:

答案 0 :(得分:0)

在我看来,更好的解决方案是传递给模型id成员并获取记录(如果存在),如果不存在,则接收null,例如:

$member_quest = Questionnaire::where('memberid', $member_id)->first();

此解决方案将告诉您记录是否存在。

关于主页上的按钮,您可能需要首先确保已登录系统,如果是,请检查上述查询以了解填写问卷的时间。

答案 1 :(得分:0)

如果您只想比较member_idAuth::user()->id。然后试试这个:

在您的控制器中:

  $data = Qustionaire::where('member_id', Auth::user()->id)->first();
  return View::make('home',compact('data') );

在视图中:

 @if Auth::check() //this code checks if the user is logged in or not
   @if Auth::user->id == $data->id
     //Do something
   @else
     <button>MyButton</button>
   @endif
@endif

答案 2 :(得分:0)

有很多方法可以解决这个问题。这是我可能会做的。我会使问卷表与users表一对一关系。 (见http://laravel.com/docs/5.1/eloquent-relationships#one-to-one)。

这允许您执行以下操作:

if($user->questionnaire) { .. } 

这还没有解决用户没有登录的问题。你可以通过将Auth :: user()传递给视图来解决这个问题。例如:

Route::get('/', function () {
  return View::make('home')->with('user', \Auth::user());
});

在您的视图中,您现在可以像这样检查:

@if($user and $user->questionnaire === false)
  // show questionnaire button
@endif

这假设您不想向未登录的人显示该按钮。