If语句的计算结果永远不会为真(即使应该为真)


If statement never evaluates to true (even when it should)

我创建了一个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)

未经测试,这里我假设用户只能有一个单一的角色,我们似乎不允许用户不存在于数据库中。