【问题标题】:nested foreach loop break in laravellaravel中的嵌套foreach循环中断
【发布时间】:2018-02-21 15:28:30
【问题描述】:

我正在使用 laravel。我有两张桌子。一个是users,另一个是permission。我有两个 foreach 循环。一是展示用户数据。来自users 表的用户数据。另一个foreach 循环用于检查userpermission 表中是否可用。 我正在从users 表中获取所有用户,如下所示:

    $allTeachers = User::where('role',2)->paginate(4);

我也像这样从权限表中获取所有数据。

$allpermiteds = Specialpermission::where('add_teacher','!=','NULL')->get();

我已将这两个查询发送到我的视图。它工作正常。 现在我正在像这样在我的视图中打印这些用户数据

@foreach($allteachers as $teacher)
            <tr> 
              <td>{{ $teacher->id}}</td>
              <td>{{ $teacher->name }}</td>
              <td>{{ $teacher->email }}</td>
              <td><button>give</button></td>
              <td><button>Remove</button></td>
@endforeach

我已经打印了两个按钮给和删除。现在我想这样做,如果$teacher-&gt;idpermissionadd_teacher 列中可用,那么它应该显示remove 按钮。否则它应该显示add 按钮。 我已经这样做了,但它无法正常工作。

@foreach($allteachers as $teacher)
        <tr> 
          <td>{{ $teacher->id}}</td>
          <td>{{ $teacher->name }}</td>
          <td>{{ $teacher->email }}</td>
          <td>@foreach($allpermitted as $p)
        @if($p->add_teacher == $teacher->id)
        <button>Remove</button>
        @else
       <button>give</button>
        @endif
@endforeach</td>
@endforeach

它显示了很多按钮。如果权限表中有4 用户,那么它将为每个user 显示4 按钮。这是主要问题

提前致谢。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    很简单,从 db 中选择 add_teacher 列,然后将您的 Specialpermission 对象转换为如下所示的数组:

    $permissionData = Specialpermission::where('add_teacher','!=','NULL')->select('add_teacher')->get();
    $allpermiteds   = collect($permissionData )->map(function($x){ return (array) $x; })->toArray();
    

    然后使用in_array进行权限检查

    @foreach($allteachers as $teacher)
    
        <tr> 
          <td>{{ $teacher->id}}</td>
          <td>{{ $teacher->name }}</td>
          <td>{{ $teacher->email }}</td>
          <td>
            @if(in_array($teacher->id,$allpermitted))
            <button>Remove</button>
            @else
           <button>give</button>
            @endif
        </td>
    
    @endforeach
    

    【讨论】:

    • 谢谢,但它只是打印 give 。我的意思是如果条件不起作用。如果我在查看条件之前执行{{dd($allpermitted)}},我可以看到这些数据。但如果条件不起作用。它打印其他条件。
    • @Fokrule:试试这个:@if(in_array($teacher-&gt;id, $allpermiteds))
    • @HirenGohel 两者都是一样的。如果我发送$allpermiteds,那么我应该$allpermiteds,如果我从控制器发送$allpermited 到我的视图,那么我应该使用$allpermited
    • $allpermitedsTmp = collect($permissionData )-&gt;map(function($x){ return (array) $x; })-&gt;toArray(); then $allpermiteds= []; foreach($allpermitedsTmp as $item){ $allpermiteds[] = $item-&gt;add_teacher; } 现在你的 $allpermiteds 数组只包含教师 ID,现在 if (in_array()) 逻辑将起作用。
    【解决方案2】:

    我更喜欢使用 eloquent 函数with 来定义两个表之间的关系:

    $allTeachers = User::where('role',2)->with('SpecialPermisson')->paginate(4);
    

    它将添加一个SpecialPermission 字段(如果有)。如果没有,它会给你一个空白字段,所以检查它是否为空。

    【讨论】:

    • 你能不能解释一下。我的意思是这两个表之间的雄辩关系,然后我应该如何检查条件。请@sushant
    • @Fokrule 在您定义用户和特殊权限的模型中添加一个定义它们之间关系的函数link 查看此链接以获取更多数据它将始终像往常一样返回数据,并带有一个额外的字段specialPermisson 如果您 dd $allteachers 并使用 php empty 函数检查该字段是否为空,您将看到它
    • yap 如果没有特殊权限则显示为空
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2016-06-11
    • 2015-06-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多