我正在寻找关于解决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());
如果他们没有登录就会失败。
有关如何解决此问题的任何解决方案?
答案 0 :(得分:0)
在我看来,更好的解决方案是传递给模型id成员并获取记录(如果存在),如果不存在,则接收null,例如:
$member_quest = Questionnaire::where('memberid', $member_id)->first();
此解决方案将告诉您记录是否存在。
关于主页上的按钮,您可能需要首先确保已登录系统,如果是,请检查上述查询以了解填写问卷的时间。
答案 1 :(得分:0)
如果您只想比较member_id
和Auth::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
这假设您不想向未登录的人显示该按钮。