Laravel通过视图中的2个不同模型嵌套@foreach [英] Laravel Nested @foreach By 2 Different Model in View

查看:37
本文介绍了Laravel通过视图中的2个不同模型嵌套@foreach的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

模型

// Relationship in \App\FatherRegistrars and \App\MotherRegistrars and \App\GuardianMaleRegistrars \App\GuardianFemaleRegistrars
public function student_registrars()
{
    return $this->belongsToMany('App\StudentRegistrars')->withTrashed();
}

控制器

public function index(Request $request)
{
    $dataFathers = \App\FatherRegistrars::get();
    $dataMothers = \App\MotherRegistrars::get();

    $dataGM = \App\GuardianMaleRegistrars::get();
    $dataGF = \App\GuardianFemaleRegistrars::get();

    // manual pagination using code attached in AppServiceProvider.php
    $data = $dataFathers->toBase()->merge($dataMothers)->paginate($items);

    return view('parents-guardians-registrars.index', compact('data', 'dataFathers', 'dataMothers', 'dataGM', 'dataGF'))->withItems($items); 
}

查看

@foreach($data as $var)
    <tr>
        <td style="text-align:center;">
          <input type="checkbox" id="select" class="sub_chk" data-id="{{$var->id}}" value="{{$var->id}}" name="selected_values[]"/>
        </td>
        <td>{{$var->id }}</td>
        <td>{{$var->name}}</td>
        <td>{{$var->email}}</td>
        <td> 
          <?php $elements = array(); ?>
          @foreach($var->student_registrars as $category)
            <?php $elements[] = '<a href=" '.route('student-registrars.show', $category->id).' "> '.$category->name.' </a>'; ?>
          @endforeach
          <?php echo implode(',<br>', $elements); ?>
        </td> 
        <td>
          // Second foreach should be here
        </td>
        <td>
          <a href="{{ route('father-registrars.show', $var->id) }}" class="btn btn-primary btn-sm">Detail</a>
        </td>
    @endforeach 

    // Second foreach
    @foreach($dataGM as $var2)
    <tr>
       <td>
         <?php $elements = array(); ?>
         @foreach($var2->student_registrars as $category)
            <?php $elements[] = '<a href=" '.route('student-registrars.show', $category->id).' "> '.$category->name.' </a>'; ?>
         @endforeach
         <?php echo implode(',<br>', $elements); ?>
       </td>
    </tr>
    @endforeach 

      </tr>

上面代码的结果是:

我在一个视图中有多个与foreach有关的小问题.这实际上只是一个简单的问题,但我被困在这里.任何身体都能解决吗?我应该使用局部视图吗?

I have a little problem related multiple foreach in one view. It's actually just a simple problem but I am stuck here. Any body can solve it? Should I use partial view to do this?

推荐答案

这可能无法正常工作(未经测试或验证),但是您可以尝试以下方法:

This may not exactly work (not tested or verified), but you can give something like this a try:

@foreach($data as $var)
  <tr>
    <td style="text-align:center;">
      <input type="checkbox" id="select" class="sub_chk" data-id="{{$var->id}}" value="{{$var->id}}" name="selected_values[]"/>
    </td>
    <td>{{$var->id }}</td>
    <td>{{$var->name}}</td>
    <td>{{$var->email}}</td>

    <?php $elements = array(); ?>
    @foreach($var->student_registrars as $i => $category)
      <td> 
        <?php $elements[] = '<a href=" '.route('student-registrars.show', $category->id).' "> '.$category->name.' </a>'; ?>
        <?php echo implode(',<br>', $elements); ?>
      </td> 
      <td>
          <?php $elements2 = array(); ?>
         @foreach($var2->student_registrars[$i] as $category)
            <?php $elements2[] = '<a href=" '.route('student-registrars.show', $category->id).' "> '.$category->name.' </a>'; ?>
         @endforeach
         <?php echo implode(',<br>', $elements2); ?>
      </td>
    @endforeach
    
    <td>
      <a href="{{ route('father-registrars.show', $var->id) }}" class="btn btn-primary btn-sm">Detail</a>
    </td>
  </tr>
@endforeach 

您遇到的问题是没有直接关联 $ data $ dataGM .您应该尝试使用关系",以便可以从 $ data 中将 $ dataGM 所需的数据作为关系进行访问,例如

The problem you have is that there is no direct association $data and $dataGM. You should try and use Relationships so that the data needed for $dataGM can be accessed as a relationship from $data, e.g.

$children = $data[$i]->children;
$adopted = $data[$i]->adopted_children;

然后,您可以直接在这些项目上循环,而不必创建多个变量.

Then you can loop directly on these items instead of having to create multiple variables.

这篇关于Laravel通过视图中的2个不同模型嵌套@foreach的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆