我有一个简单的Laravel项目,用于在表中显示父记录,并使用可折叠的行显示子记录。我有一个很好的Bootstrap表,可以加入我的控制器中的父表和子表并填充表,但不能将子组分组在一个父表下。我不确定我是否在控制器中错误地构建了传递的数据集,或者我是否缺少一些“Laravel方式”来执行此操作。这是一个简单的命题,循环通过父母,直到有一个孩子,然后循环通过它的孩子,然后恢复循环父母等,但它让我疯了。我找不到任何直接的例子或参考来解决我的问题,但这是一个常见的要求。
我需要知道如何引用子记录来遍历它们以填充折叠部分。我的尝试要么导致每个孩子的父行(显示的代码)或一堆重复的子项。如果我可以从我的控制器传递两个数据集,一个父母和一个独立的孩子,那么我可以在代码中构建这个,但我不知道如何在Laravel中执行此操作或者是否有更简单的方法。
我确实从Laravel DataTables开始,但为了获得详细的子行需要在Laravel中实现把手模板,我找不到可用的引用来做到这一点,所以决定使用Bootstrap表从我自己的代码恢复到自己的代码。比我卡住了。
这是我的控制器(DataassetsController.php)。 “投资帐户”表包含父项(与其他联合表一样),“投资行项目”表包含“投资帐户”的子记录。
class DataassetsController extends Controller
{
public function getUnion()
{
$money = DB::table('monetary_assets')
->select(['monetary_asset_name as name', 'monetary_asset_type as type', 'monetary_asset_value as value', DB::raw("NULL as item"), DB::raw("NULL as institution_id"), DB::raw("NULL as item_id")]);
$personal = DB::table('personal_property_assets')
->select(['personal_name as name', 'personal_type as type', 'personal_current_value as value', DB::raw("NULL as item"), DB::raw("NULL as institution_id"), DB::raw("NULL as item_id")]);
$investments = DB::table('investment_accounts')
->join('investment_line_items', 'investment_institution_name_id', '=', 'investment_accounts.id')
->select(['investment_institution_name as name', 'Investment_account_type as type', DB::raw("NULL as value"), 'investment_name as item', 'investment_institution_name_id as institution_id', 'investment_accounts.id as item_id' ]);
$union = DB::table('real_property_assets')
->select(['real_name as name', 'real_type as type', 'real_current_value as value', DB::raw("NULL as item"), DB::raw("NULL as institution_id"), DB::raw("NULL as item_id")])
->union($money)
->union($personal)
->union($investments)
->get();
return view('assets.allassets', ['user_assets' => $union]);
}
这是我的路线:
Route::get('/dataassets', 'DataassetsController@getUnion');
这是我的刀片(allassets.blade.php)代码:
@extends('layouts.master')
<!-- Collapsible accordion rows in bootstrap -->
<div class="col-lg-6">
<div class="panel panel-default">
<div class="panel-heading"><h3>All Assets</h3></div>
<div class="panel-body">
<table class="table table-condensed" style="border-collapse:collapse;">
<thead>
<tr><th> </th>
<th>Asset Name</th>
<th>Type</th>
<th>Value</th>
</tr>
</thead>
<tbody>
@foreach ($user_assets as $user_asset) <!-- don't forget to add a variable to the loop to index ID's of subrow -->
<tr data-toggle="collapse" data-target="#demo{{$loop->index}}" class="accordion-toggle">
@isset($user_asset->item)
<td><button class="btn btn-default btn-xs"><span class="glyphicon glyphicon-eye-open"></span></button></td>
@else
<td></td>
@endisset
<td>{{$user_asset->name}}</td>
<td>{{$user_asset->type}}</td>
<td style="text-align:right">${{ number_format($user_asset->value,2)}}</td>
<?php $var = ($user_asset->name); ?>
</tr>
@isset($user_asset->item)
<tr>
<td colspan="12" class="hiddenRow"><div class="accordian-body collapse" id="demo{{$loop->index}}">
<table class="table table-striped">
<thead>
<th>Item</th>
<th>Value</th>
<th>Institution</th>
<th>Item</th>
<th>Edit</th>
</thead>
<tbody>
<tr>
<td>{{$user_asset->item}}</td>
<td> placeholder</td>
<td> {{$user_asset->institution_id}}</td>
<td> {{$user_asset->item_id}}</td>
<td><a href="#" class="btn btn-default btn-sm">
<i class="glyphicon glyphicon-cog"></i></a></td></tr>
</tbody>
</table>
</div> </td>
</tr>
@endisset
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<!-- end Bootstrap table -->
这是我得到的图片,其中一个子行被弹出: Bootstrap table showing only one child at a time with multiple copies of parent
以下是相关数据库表的图片: The parent and child tables (other tables referenced above do not have children, only this one)
我正在使用Laravel 5.5&amp; XAMPP上的PHP7 非常欢迎任何帮助或建议。