繁体   English   中英

关于如何从Laravel 5.5中的3个不同的SQL表中填充视图中的HTML表的建议?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM