【问题标题】:Showing parent and child in one row在一行中显示父母和孩子
【发布时间】:2019-10-18 00:26:36
【问题描述】:

实际上,我在 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

【问题讨论】:

  • 你能显示你当前的代码吗

标签: laravel html-table bootstrap-4


【解决方案1】:

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

【讨论】:

  • 我不是想创建一个新模型。它已经在那里了。我只是想在表格中显示数据。
  • 我建议你正确的方式。您必须为父表创建模型,为子表创建模型,并创建一对多关系。我不建议在 Laravel 中使用纯 sql 进行此类简单查询。
  • Serhii 当然是正确的。如果您为 BILL 和 BOOKING 实现单独的模型,然后将它们与一对多关系链接,您的模型代码会变得更加简单。在您看来,然后您遍历 BILLS,为每行开始一个新行,然后在该循​​环内,您遍历 BOOKING,在单独的单元格中显示每个的数据。这比我的解决方案更干净,假设您不更改模型。
【解决方案2】:

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

您似乎有 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>

这个想法是每当一行数据包含一个新的 BILL 时,您就开始在表格中显示一个新行,否则,您只需继续向当前行添加单元格。

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多