Laravel,检查记录是否存在并在表格中显示的最佳/替代方法是什么?

时间:2017-08-04 02:48:35

标签: php excel laravel laravel-5.4

目前我正在使用Laravel-Excel(MaatWebsite)并想检查excel数据是否与数据库“家具”表中的数据相同

控制器

// assume $id is retrieve from parameter
$check_furnitures = Furniture::where('company_no', $id)->get();
$rows = Excel::load('storage\\app\\public\\upload\\furniture.xlsx', function($reader){$reader->noHeading();$reader->skipRows(1)})->get();

查看

<table>
  <thead>
    <tr>
      <td>Chair Name></td>
      <td>Desk Name></td>
      <td>Carpet Name></td>
      <td>Status</td>
    </tr>
   </thead>
  <tbody>
  <?php $arr = array(); ?>
    @foreach($rows as $key => $value)
      @foreach($check_furnitures as $fur)
        @if(
           $fur->chairs == $value[1] && 
           $fur->desks == $value[2] && 
           $fur->carpets == $pvalue[3]
           )
          <?php $temp_array[] = $value[0] ?>
        @endif
      @endforeach
    @endforeach
    <tr>
      <td>{{$value[1]}}</td>
      <td>{{$value[2]}}</td>
      <td>{{$value[3]}}</td>
      <td>
        @foreach($arr as $test)
          @if($test == $value[0])
            DUPLICATED VALUE
          @endif
        @endforeach
      </td>
    <tr>
<table>

Excel文件

.join()

1 个答案:

答案 0 :(得分:1)

最有效的方法是首先索引数据库结果而不是循环。 Laravel有一个$collection->keyBy('id'),以便您稍后$collection->get($id)

话虽如此,你可以这样做:

<table>
    <thead>
        <tr>
            <td>Chair Name></td>
            <td>Desk Name></td>
            <td>Carpet Name></td>
            <td>Status</td>
        </tr>
    </thead>
    <tbody>
        @php

        $arr = array(); 
        $check_furnitures->keyBy('number');

        @endphp
        @foreach ($rows as $key => $row)
            <tr>
                <td>{{ $row->chair }}</td>
                <td>{{ $row->desk }}</td>
                <td>{{ $row->table }}</td>
                <td>
                    @if($check_furnitures->get($row->number) !== null)
                        DUPLICATED VALUE
                    @endif
                </td>
            </tr>
        @endforeach       
    </tbody>
</table>