在一排显示父母和孩子

时间:2019-10-17 14:43:23

标签: laravel html-table bootstrap-4

实际上,我在laravel网站中有一个表,其中包含来自不同联接数据库表的数据。但是通过这种方式,我为每个孩子得到一行并重复了父数据。

相反,我希望每个父数据有一行,而所有子项都在同一行。

看起来像一个基本问题,但实际上我已经看不见了。

有什么主意吗?

查看:

    $rechnungen=DB::select(DB::raw("
    select
    reintern, krenr, krebez, bnrkenn, bubelegnr, aufnr, sacktonr, sacbez, ustkenn,
    TO_CHAR(round(bupbetr*(1+ustproz/100),2), '99G999D99', 'NLS_NUMERIC_CHARACTERS = '',.') as brutto,
    wiebez, objktext, vektext
    from RECHNUNG re
    join BUCHUNG bu on bu.REKEY=re.REKEY
    ...
    join BUCHUNGPOS bup on bup.BUKEY=bu.BUKEY and nvl(BUPARTKZ,0)=0 and bup.KREKEY is null
   ...
    where re_status=0
    order by bnr.BNRKENN, bu.BUBELEGNR
    "));

控制器:

               @foreach ($rechnungen as $re)
                <tr>
                  <td></td>
                  <td>{{$re->wiebez}} {{$re->objktext}} {{$re->ve_ktext}}</td>
                  <td>{{$re->krektonr}}</td>
                  <td>{{$re->krebez}}</td>
                  <td>{{$re->bnrkenn}} {{$re->bubelegnr}}</td>
                  <td>{{$re->aufnr}}</td>
                  <td>{{$re->sacktonr}} {{$re->sacbez}}</td>
                  <td class="text-right">{{$re->ust_kenn}}</td>
                  <td class="text-right">{{$re->brutto}} €</td>
                </tr>
                @endforeach

2 个答案:

答案 0 :(得分:0)

看起来您只需要创建一个关系多对多 https://laravel.com/docs/5.8/eloquent-relationships#many-to-many

答案 1 :(得分:0)

试图用英语理解您的问题:

您似乎有3个表:

Table BILL: Columns REKEY + various data
Table BOOKING: Columns BUKEY + REKEY + various data
Table BOOKINGPOS: Columns BUPKEY + BUKEY + various data 

其中BOOKING.REKEY是对BILL.REKEY的外键引用,而BOOKINGPOS.BUKEY是对BOOKING.BUKEY的外键引用。

我假设每个BILL可以有多个BOOKING,每个BOOKING可以有多个BOOKINGPOS。

您遇到的问题是显示/视图问题,而不是数据/模型问题。在伪代码中,您应按以下方式实现视图:

{{ $last_rekey="" }}
@foreach( $rows as $row )
  @if( $row->rekey != $last_rekey )
    @if( $last_rekey != "" )
      </tr>
    @endif
    <tr>
      <td>$row->BILLdata1</td>
      <td>$row->BILLdata2</td>
      ...
    $last_rekey=$row->rekey
  @endif
  <td>$row->BOOKINGdata1</td>
  <td>$row->BOOKINGdata2</td>
  ...
  <td>$row->BOOKINGPOSdata1</td>
  ...
@endforeach
</tr>

这样的想法是,只要一行数据包含新的帐单,就开始在表中显示新行,否则,您只需继续将单元格添加到当前行即可。