![](/img/trans.png)
[英]How can i optimize my query to deal with 10 thousand reocrds in MySql table from Laravel 5.5?
[英]Suggestions on how I populate my HTML Table in the view from 3 different SQL Tables in Laravel 5.5?
希望您能在这里帮助我解决我的问题。 我想做的是从3个不同的SQL表中查询的数据中填充视图中的表。
从收集的数据中:
MySQL查询:
-- Ordered Query
SELECT abstract_supplier.supplier,abstract_supplier.canvasser_name,abstract_supplier.canvasser_department, abstract_items.particulars, abstract_items.qty,abstract_items.unit,abstract_price.unit_price, abstract_price.total_price
-> FROM abstract_items
-> RIGHT JOIN abstract_price ON abstract_price.item_id = abstract_items.id
-> LEFT JOIN abstract_supplier ON abstract_supplier.id = abstract_price.supplier_id;
我的控制器:
public function show($id)
{
$abstract = AbstractModel::find($id);
$office = Office::all();
$pr_item = PurchaseRequestItemModel::all()->where('pr_form_number',$abstract->pr_number);
$grand_total = $pr_item->sum('pr_estimated_cost');
$abstract_items = abstractitemmodel::all()->where('abstract_id',"=",$abstract->id);
$query= DB::table('abstract_supplier')
->paginate(3);
// dd($query);
return view('abstract.abstract-form',compact('abstract','abstract_items','pr_item','grand_total','office','query','supp_query'));
}
我的观点
<div>
<table class="table table-responsive table-bordered table-condensed">
<thead class="text-center">
<tr class="center-t">
<th rowspan="3" class="col-xs-3">Particulars</th>
<th rowspan="3" class="col-xs-1">Qty</th>
<th rowspan="3" class="col-xs-1">Unit</th>
@php $counter = 0; @endphp
@foreach($query as $key => $suppliername)
@php $counter++; @endphp
<th colspan="2" class="col-xs-2">Supplier {{$counter}}</th>
@endforeach
@if($query->count() < 3)
@for($i = $query->count(); $i < 3; $i++)
<th colspan="2" class="col-xs-2">Supplier</th>
@endfor
@endif
</tr>
<tr>
@foreach($query as $indexKey => $suppliers)
<td colspan="2" class="col-xs-2 someCell">{{$suppliers->supplier}}</td>
@endforeach
@if($query->count() < 3)
@for($i = $query->count(); $i < 3; $i++)
<td colspan="2" class="col-xs-2">N/A</td>
@endfor
@endif
</tr>
<tr class="center-t">
@foreach($query as $key => $prices)
<th class="col-xs-1">Price/Unit</th>
<th class="col-xs-1">Price/Item</th>
@endforeach
@if($query->count() < 3)
@for($i = $query->count(); $i < 3; $i++)
<th class="col-xs-1">Price/Unit</th>
<th class="col-xs-1">Price/Item</th>
@endfor
@endif
</tr>
</thead>
<tbody>
@foreach($abstract_items as $key2 => $items)
<tr>
<td>{{$items->particulars}}</td>
<td>{{$items->qty}}</td>
<td>{{$items->unit}}</td>
@foreach($query as $price_key => $prices)
<td class="text-right"></td>
<td class="text-right"></td>
@endforeach
@if($query->count() < 3)
@for($i = $query->count(); $i < 3; $i++)
<td class="col-xs-1">N/A</td>
<td class="col-xs-1">N/A</td>
@endfor
@endif
</tr>
@endforeach
</tbody>
</table>
{{$query->links()}}
</div>
如您所见,我使用foreach来循环并填充表格,但结果并非我所期望的,我希望您对如何实现此目标有见解和建议。
尽管我将您的AbstractModel重命名是因为它会引起其他程序员的严重困惑并且不遵循约定,但我认为我理解您的要求:
class AbstractModel extends Model
{
// protected $table = 'abstract';
protected $fillable = [
'id',
'created_at',
'created_by' ,
'abstract_no',
'pr_number',
'proc_details',
'office',
'requestor_name'
];
public function offices()
{
return $this->hasOne('App\Office', 'id', 'office');
}
public function purchaseRequestItemModels()
{
return $this->hasOne('App\PurchaseRequestItemModel', 'id', 'pr_number');
}
}
Class Office extends Model
{
...
public function abstractModels()
{
return $this->belongsTo('App\AbstractModel', 'office', 'id');
}
}
class PurchaseRequestItemModel extends Model
{
...
public function abstractModels()
{
return $this->belongsTo('App\AbstractModel', 'pr_number', 'id');
}
}
然后,您可以继续实例化AbstractModel并捕获如下所示的链接的办公室和PRNumbers:
$abstract = AbstractModel::find($id);
//These method calls return Objects of the type:
// Office
$abstract->offices();
//PurchaseRequestItemModel
$abstract->purchaseRequestItemModels();
现在,请检查编码标准,以进一步改善您的语义和代码质量,因为它将在将来对很多人有所帮助!
注意:我了解您可能还有其他可以互相交流的classes
,并且如果您创建的关系如上所述,您可以达到相同的结果。
进一步的关系说明可以在这里找到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.