我创建了一个if语句"if ($user_roles == 3)$user_roles的值为3,条件应该为真,但结果总是为假。
下面是我的代码:public function ViewSponsorInfo($sponsor_id)
{
$id = $sponsor_id;
$user_id = User::where('id','=',$id)->get();
$user_roles = [];
foreach ($user_id as $id) {
array_push($user_roles, $id->role);
}/*
dd($user_roles);*/
if ($user_roles == 3) {
$orga = Organization::where('orga_id','=',$sponsor_id)->get();
dd($orga);
return view('pages.Ngo.View-Sponsor-Information',compact('orga'));
}else{
$indi = Individual::where('indi_id','=',$sponsor_id)->get();
dd($indi);
return view('pages.Ngo.View-Sponsor-Information',compact('indi'));
}
}
$user_roles
不是3,也永远不可能是3。它是一个数组。但是,它的内容可以是三个。
试题:
if(in_array(3, $user_roles)) { ...}
参考:in_array
$user_roles
是一个数组。所以你的if语句总是假的
我想,试试这个。
foreach ($user_id as $id) {
array_push($user_roles, array('role' => $id->role));
}/*
dd($user_roles);*/
foreach ($user_roles as $user_role) {
if ($user_role['role'] == 3) {
$orga = Organization::where('orga_id','=',$sponsor_id)->get();
dd($orga);
return view('pages.Ngo.View-Sponsor-Information',compact('orga'));
}else{
$indi = Individual::where('indi_id','=',$sponsor_id)->get();
dd($indi);
return view('pages.Ngo.View-Sponsor-Information',compact('indi'));
}
}
或
foreach ($user_id as $id) {
array_push($user_roles, array('role' => $id->role));
}/*
dd($user_roles);*/
foreach ($user_roles as $user_role) {
if ($user_role->role == 3) {
$orga = Organization::where('orga_id','=',$sponsor_id)->get();
dd($orga);
return view('pages.Ngo.View-Sponsor-Information',compact('orga'));
}else{
$indi = Individual::where('indi_id','=',$sponsor_id)->get();
dd($indi);
return view('pages.Ngo.View-Sponsor-Information',compact('indi'));
}
}
请在试过这个之后说几句。
从您显示的函数ViewSponsorInfo()的名称判断,它只对检测该用户是否在数据库中具有唯一角色'3'感兴趣。
我的意思是结果是二元的,不是吗?它们要么是3,要么不是,不需要循环遍历结果。
$user_id = User::where('id','=',$id)->get();
if($user_id[0] !== 3 ) { //***
doSponsorLink();
}else{
doNonSponsorLink();
}
我不熟悉你正在使用的Laravel或db层,所以也许这甚至只是if($user_id)
。
未经测试,这里我假设用户只能有一个单一的角色,我们似乎不允许用户不存在于数据库中。