查找数据库中是否存在用户'ID,如果不存在则显示按钮


Finding if a user's ID exists in the database and displaying a button if it doesn't

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

我有一个注册类型的网站,内置在Laravel 5.1,我想让新用户填写一份问卷。

我想这样做的方式是显示一个按钮,让他们点击我的主页,但我只希望它显示,如果他们还没有填写一个。

我一直在玩弄如何做到这一点,但我找不到正确的解决方案。

我最初这样做的方式是在我的路由。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());

如果他们没有登录,它将失败。

有解决这个问题的方法吗?

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

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

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

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

有很多方法可以解决这个问题。我可能会这么做。我将使问卷表成为与用户表的一对一关系。(见http://laravel.com/docs/5.1/eloquent-relationships一对一)。

你可以这样做:

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

这个假设你不想向没有登录的人显示按钮

如果您只想比较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